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.
相关产品推荐
相关产品推荐

