在我的类中更改像版本2这样的getter方法是不是不好的做法?
版本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;
}
发布于 2012-12-14 17:51:53
我认为,如果您的getter方法更改了对象的内部状态,这实际上是一种非常糟糕的做法。
为了达到同样的效果,我建议只返回"N/A"
。
foo.getMyValue()
的调用实际上可能会改变foo
.的行为
或者,从null
到"N/A"
的转换可以在设置器中完成,即,如果传递null
,则可以将内部值设置为"N/A"
。
概括地说:
我只会添加像"N/A"
这样的状态,如果它们是某些应用程序接口或其他依赖于您的代码的实例所期望的。如果不是这样,您应该依赖于在您的编程语言中可用的标准null类型。
发布于 2012-12-14 17:50:26
在我看来,除非您正在执行lazy-loading
(在这种情况下您并不是这样),否则getters不应该更改该值。所以我要么:
将更改放入setter中
public void setMyValue(String value) {
if(value == null || value.isEmpty()){
this.myValue = "N/A";
} else {
this.myValue = value;
}
}
或者,如果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;
}
发布于 2012-12-14 22:53:27
不是的。您在这里做了两件事。获取和设置。
https://stackoverflow.com/questions/13876066
复制相似问题