神奇的重构技术
程序员文章站
2022-03-03 19:49:25
...
代码中经常会出现枚举性的变量,比如血型、性别之类。
以血型为例:
这个写法的代码中,setBlood的参数为整型,如果如此调用person.setBlood(9);
编译器无法发现错误,只能靠人为控制,如果在方法setBlood中检测参数的有效性,又超越了该方法的职责。
重构后的代码如下:
(2)方便编译期间发现错误
(3)避免使用超越数据范围的参数
以血型为例:
class Blood {
public final static int o = 0 ;
public final static int A = 1 ;
public final static int B = 2 ;
public final static int AB = 3 ;
private Blood();
}
class person {
private int _blood;
public void setBlood( int b) {
_blood = b;
}
如果要给一个person的实例设置血型,代码如此:person.setBlood(Blood.A);这个写法的代码中,setBlood的参数为整型,如果如此调用person.setBlood(9);
编译器无法发现错误,只能靠人为控制,如果在方法setBlood中检测参数的有效性,又超越了该方法的职责。
重构后的代码如下:
final class Blood{
public final static Blood O=new Blood(0);
public final static Blood A=new Blood(1);
public final static Blood B=new Blood(2);
public final static Blood AB=new Blood(3);
private int _bloodCode;
private Blood(int b){
_bloodCode=b;
}
public int getCode(){
return _bloodCode;
}
}
class person{
private Blood _blood;
public setBlood(Blood b){
_blood=b;
}
}
如此,(1)隐藏了血型的编码细节(2)方便编译期间发现错误
(3)避免使用超越数据范围的参数
上一篇: 一次神奇的数据生成经历
下一篇: 神奇的