需求描述:设置Person对象的gender属性取值检验规则如下:
取值只能为 “男”、“女”,其他字符都非法
会有人这样实现代码吗?
public class Person { private String gender; public String getGender(){ return gender; } /** * 设置性别 * 男,女 * 若输入其他字符串抛出异常 */ public void setGender(String gender){ if(!"男".equals(gender) || !"女".equals(gender)){ throw new RuntimeException("非法字符"); } this.gender = gender; } }
测试代码如下:
public class TestPerson { public static void main(String[] args) { Person p = new Person(); p.setGender("男"); p.setGender("女"); p.setGender("男1"); } }
我们很自然的认为会这样写,我们执行一下试试,先看看效果如何:
会发现控制台抛出异常了,说明我的想法是有问题的。
其实这么写是对需求理解有问题,正确的理解是:如果gender既不为“男”和“女”提示字符非法才对。
正确实现如下:
public class Person {
private String gender;
public String getGender(){
return gender;
}
/**
* 设置性别
* 男,女
* 若输入其他字符串抛出异常
*/
public void setGender(String gender){
if(!"男".equals(gender) && !"女".equals(gender)){
throw new RuntimeException("非法字符");
}
this.gender = gender;
}
}