首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >让我的getter方法更改存储值是不是一种糟糕的做法?

让我的getter方法更改存储值是不是一种糟糕的做法?
EN

Stack Overflow用户
提问于 2012-12-14 17:41:55
回答 14查看 7.1K关注 0票数 70

在我的类中更改像版本2这样的getter方法是不是不好的做法?

版本1:

代码语言:javascript
运行
复制
 public String getMyValue(){
     return this.myValue
 }

版本2:

代码语言:javascript
运行
复制
 public String getMyValue(){

    if(this.myValue == null || this.myValue.isEmpty()){
       this.myValue = "N/A";
    }

    return this.myValue;
 }
EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2012-12-14 17:51:53

我认为,如果您的getter方法更改了对象的内部状态,这实际上是一种非常糟糕的做法。

为了达到同样的效果,我建议只返回"N/A"

  • 一般来说,这个内部字段可以在其他地方(内部)使用,对于这些地方您不需要使用getter方法。因此,最终,对foo.getMyValue()的调用实际上可能会改变foo.

的行为

或者,从null"N/A"的转换可以在设置器中完成,即,如果传递null,则可以将内部值设置为"N/A"

概括地说:

我只会添加像"N/A"这样的状态,如果它们是某些应用程序接口或其他依赖于您的代码的实例所期望的。如果不是这样,您应该依赖于在您的编程语言中可用的标准null类型。

票数 117
EN

Stack Overflow用户

发布于 2012-12-14 17:50:26

在我看来,除非您正在执行lazy-loading (在这种情况下您并不是这样),否则getters不应该更改该值。所以我要么:

将更改放入setter中

代码语言:javascript
运行
复制
public void setMyValue(String value) {
    if(value == null || value.isEmpty()){
        this.myValue = "N/A";
    } else {
        this.myValue = value;
    }
}

或者,如果value设置不正确,则让getter返回默认值:

代码语言:javascript
运行
复制
public String getMyValue() {
    if(this.myvalue == null || this.myvalue.isEmpty()){
        return "N/A";
    }    
    return this.myValue;
}

在延迟加载的情况下,我会说在getter中更改成员是可以的,您可以这样做:

代码语言:javascript
运行
复制
public String getMyValue() {
    if (this.myvalue == null) {
        this.myvalue = loadMyValue();
    }    
    return this.myValue;
}
票数 38
EN

Stack Overflow用户

发布于 2012-12-14 22:53:27

不是的。您在这里做了两件事。获取和设置。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13876066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档