让我的getter方法更改存储的值是不好的做法吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

改变我的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"

  • 一般来说,这个内部字段可能在其他地方(内部)使用,你不需要使用getter方法。所以最终,这个呼吁foo.getMyValue()实际上可以改变行为foo

或者,从nullto 转换"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;
}

扫码关注云+社区