You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:35:20