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

Java中boolean与double类型Setter方法校验实现咨询

Java中boolean和double类型的Setter方法校验实现

针对你提出的boolean和double类型Setter校验需求,结合业务场景给出具体实现方案,同时修正你代码中重复定义Setter的问题:

一、boolean类型字段isNew的校验

boolean类型只有true/false两个值,校验逻辑完全依赖业务规则。比如常见的规则是:对象一旦标记为非新对象(isNew=false),就不允许再改回新对象状态。

实现代码:

public void setIsNew(boolean isNew) {
    // 业务规则示例:已标记为非新对象的实例,禁止重新设置为新对象
    if (!this.isNew && isNew) {
        throw new IllegalArgumentException("已标记为非新对象,无法重新设置为新对象");
    }
    this.isNew = isNew;
}

如果你的业务没有特殊状态限制,也可以不做额外校验(但通常boolean字段都有对应的业务语义,建议根据实际需求添加校验)。

二、double类型字段bonus的校验

double类型需要重点校验数值有效性和范围合法性,比如避免负数、NaN(非数值)或无穷大的情况。

实现代码:

public void setBonus(double bonus) {
    // 校验数值不能为负数
    if (bonus < 0) {
        throw new IllegalArgumentException("奖金不能为负数");
    }
    // 校验是否为有效数值(排除NaN和无穷大)
    if (Double.isNaN(bonus) || Double.isInfinite(bonus)) {
        throw new IllegalArgumentException("奖金必须是有效的数值");
    }
    // 可选:添加数值范围限制,比如奖金上限为10000
    if (bonus > 10000) {
        throw new IllegalArgumentException("奖金不能超过10000");
    }
    this.bonus = bonus;
}

三、修正后的完整Person类代码

你原代码中重复定义了setName和setId方法,编译会报错,以下是合并校验逻辑后的完整代码:

public class Person {
    private String name;
    private String id;
    private boolean isNew;
    private double bonus;

    public Person() {
        this("unknown", "Unknown", true, 0.0);
    }

    public Person(String id, String name, boolean isNew, double bonus) {
        setId(id);
        setName(name);
        setIsNew(isNew);
        setBonus(bonus);
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public boolean isNew() {
        return isNew;
    }

    public double getBonus() {
        return bonus;
    }

    public void display() {
        System.out.println("Id:" + id);
        System.out.println("Name:" + name);
        System.out.println("Is New:" + isNew);
        System.out.println("Bonus:" + bonus);
    }

    // 带校验的Name Setter
    public void setName(String name) {
        if (name == null) {
            throw new IllegalArgumentException("必须提供有效的姓名");
        }
        name = name.trim();
        if (name.length() == 0) {
            throw new IllegalArgumentException("姓名不能为空");
        }
        this.name = name;
    }

    // 带校验的Id Setter
    public void setId(String id) {
        if (id == null) {
            throw new IllegalArgumentException("必须提供有效的ID");
        }
        id = id.trim();
        if (id.length() == 0) {
            throw new IllegalArgumentException("ID不能为空");
        }
        this.id = id;
    }

    // 带校验的isNew Setter
    public void setIsNew(boolean isNew) {
        if (!this.isNew && isNew) {
            throw new IllegalArgumentException("已标记为非新对象,无法重新设置为新对象");
        }
        this.isNew = isNew;
    }

    // 带校验的bonus Setter
    public void setBonus(double bonus) {
        if (bonus < 0) {
            throw new IllegalArgumentException("奖金不能为负数");
        }
        if (Double.isNaN(bonus) || Double.isInfinite(bonus)) {
            throw new IllegalArgumentException("奖金必须是有效的数值");
        }
        if (bonus > 10000) {
            throw new IllegalArgumentException("奖金不能超过10000");
        }
        this.bonus = bonus;
    }
}

关键总结

Setter校验的核心是匹配业务规则:

  • String类型:重点校验非空、非空白字符
  • boolean类型:重点校验状态转换的合法性(根据业务语义)
  • double类型:重点校验数值范围、有效性(排除NaN/无穷大)

内容的提问来源于stack exchange,提问作者Nirvana.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:10:47