内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
改变我的getter方法(如我的类中的第2版)是不是很糟糕的做法。
第1版:
public String getMyValue(){ return this.myValue }
第2版:
public String getMyValue(){ if(this.myValue == null || this.myValue.isEmpty()){ this.myValue = "N/A"; } return this.myValue; }
如果你的getter方法改变对象的内部状态,我认为这实际上是一个不好的做法。
为了达到同样的目的,我建议"N/A"
。
foo.getMyValue()
实际上可以改变行为foo
。或者,从null
to 转换"N/A"
可以在setter中完成,即内部值可以设置为"N/A"
if如果null
通过。
一般的评论:
我只会添加状态,如"N/A"
某些API或其他依赖于你的代码的实例所期望的状态。如果情况并非如此,那么你应该依赖编程语言中可用的标准空类型。
在我看来,除非你在做lazy-loading
(你不是这种情况),否则获得者不应该改变价值。所以我会:
把改变放在setter中
public void setMyValue(String value) {
if(value == null || value.isEmpty()){
this.myValue = "N/A";
} else {
this.myValue = value;
}
}
或者,如果值设置不正确,则使getter返回默认值:
public String getMyValue() {
if(this.myvalue == null || this.myvalue.isEmpty()){
return "N/A";
}
return this.myValue;
}
在延迟加载的情况下,我会说在一个getter中改变你的成员是可以的,你可以这样做:
public String getMyValue() {
if (this.myvalue == null) {
this.myvalue = loadMyValue();
}
return this.myValue;
}