需求描述:设置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;
}
}