Java控制台应用中类属性输入错误的最佳通知与校验方案
问题与解决方案
问题描述
用户创建了一个代表个人资料的User类,代码如下:
public class User { private int age; public User(int age) { if (age < 150) this.age = age; else System.out.println("Incorrect age, try again"); } }
需求是限制age属性的值不大于150,当输入170这类非法值时需提示错误,但当前在构造器中直接打印提示的方式不够优雅。同时需要实现通过setter方法修改age时的输入校验逻辑。
最佳实现方式
构造器的输入校验
构造器内直接打印提示的问题在于,错误处理逻辑被硬编码在类内部,调用方无法根据业务场景灵活处理错误。更优雅的做法是抛出非法参数异常,将错误处理权交给调用方,符合Java异常处理的规范。
修改后的构造器代码:
public class User { private int age; public User(int age) { if (age < 0 || age > 150) { // 补充年龄非负校验,逻辑更严谨 throw new IllegalArgumentException("年龄必须在0到150之间"); } this.age = age; } }
调用方可以通过try-catch捕获异常,按需处理错误提示:
try { User user = new User(170); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); // 可替换为UI提示、日志记录等逻辑 }
Setter方法的输入校验
Setter方法的校验逻辑与构造器保持一致,同样通过抛出异常处理非法输入,同时可以让构造器复用setter的校验逻辑,减少代码冗余:
添加setter后的完整类代码:
public class User { private int age; public User(int age) { setAge(age); // 复用setter校验逻辑,避免重复代码 } public int getAge() { return age; } public void setAge(int age) { if (age < 0 || age > 150) { throw new IllegalArgumentException("年龄必须在0到150之间"); } this.age = age; } }
这样无论是初始化对象还是修改年龄,都能遵循统一的校验规则,同时保证了代码的可维护性。
内容的提问来源于stack exchange,提问作者anatoliy121
相关产品推荐
相关产品推荐

