它是不好的做法,有我的getter方法更改存储的价值?(Is it bad practice to

2019-07-05 06:32发布

它是不好的做法,改变我的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;
 }

Answer 1:

我认为它实际上是一个相当不好的做法,如果你的getter方法改变对象的内部状态。

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

  • 一般说来,该内部磁场可能在其他地方(内部),而您无需使用getter方法来使用。 所以,最后,调用foo.getMyValue()实际上可以改变的行为foo

可替代地,从翻译null"N/A"可以在设定器来完成,即,内部值可以被设置为"N/A" ,如果null传递。


总体意见:
我只想补充状态,如"N/A" ,如果他们是通过一些API或其他情况下依靠你的代码的预期。 如果不是这种情况,你应该依靠标准的空值类型,在你的编程语言提供给您。



Answer 2:

在我看来,除非你正在做lazy-loading (你不是在这种情况下),干将不应该改变的价值。 所以我会之一:

把变化的二传手

public void setMyValue(String value) {
    if(value == null || value.isEmpty()){
        this.myValue = "N/A";
    } else {
        this.myValue = value;
    }
}

或使吸附剂返回默认值,如果值设置不正确:

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;
}


Answer 3:

号你在这里做两件事情。 获取和设置。



Answer 4:

是。 这是一个不好的做法。

为什么?

当该值被设置(在一个构造或setter方法),它应该被验证,而不是当吸气方法被调用。 创建一个private validate*此方法也是一个好主意。

private boolean validateThisValue(String a) {
     return this.myValue != null && !this.myValue.isEmpty();
}

public void setThisValue(String a) {
    if (validateThisValue(a)) {
        this.myValue = a;
    } 
    else {
        // do something else
        // in this example will be
        this.myValue = "N/A";
    }
}

而且,在getter方法,永远都不要改变对象的状态。 我有一些项目合作,并吸气往往必须由const :“这种方法不能改变内部状态”。

至少,如果你不想在getter方法复杂的事情,你应该返回 "N/A" ,而不是改变内部状态和设置myValue"N/A"



Answer 5:

我通常定义一个特定getter

永远不要改变原来getter

 public String getMyValue(){
     return this.myValue
 }

并创建一个特定getter

public String getMyValueFormatted(){

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


Answer 6:

我觉得这是更好地初始化this.myValue = "N/A" 。 以及随后调用setMyValue应该修改this.myValue根据自己的经营状况。
getMyValue不应该以任何方式修改this.myValue 。 如果你的需求是返回一定值时,你应该返回值(如“N / A”),并不会改变this.myValue 。 干将不得修改成员的值。



Answer 7:

我想改变更好setter方法是这样,如果该值是null或空,则N/A被分配给该属性。 所以,如果你使用的类中的其他方法的属性(VG toString()您将有预期的价值在那里。

可替代地,改变设置器方法来启动一个异常时,被设置的值是不正确的,所以程序员被迫之前设置的值,以提高其处理。

除此之外,它是确定。



Answer 8:

我不觉得这是一个不好的做法 ,除非和直到你解释为什么你修改getter方法里面的对象,而不是做它的setter方法里面的它是如此必要的原因。
你觉得这不能出于某种原因做? 能否请你解释一下?



Answer 9:

你什么都喜欢。 所有的getter和setter方法后只是另一个公共方法。 你可以使用任何其他名称。

但是,如果你使用的框架,如Spring ,你一定要使用这些标准的名称,你永远不应该把它们内部的自定义代码。



Answer 10:

setter是可以修改的验证的一部分,而是一个getter应返回的值,并让验证调用者来完成。 如果确认,那么应该如何进行记录。



Answer 11:

其实,这在很大程度上取决于你想与你的get()强制执行合同 - 方法。 根据设计,按合同约定的调用者,以确保前提条件得到满足(这意味着在setter方法做一个验证常常实际上是糟糕的设计)和被叫方(我不知道这是正确的英文术语即,即所谓的一个)可以确保后置条件得到满足。

如果你定义你的合同,这样的get() - 不允许的方法来改变对象,那么你正在打破自己的合同。 想想实施等的方法

public isValid() {
    return (this.myvalue == null || this.myvalue.isEmpty());
}

这种方法的优点是,你不必请检查是否你的get()的返回是“N / A”或别的东西。 这也可以调用set()来验证你不插入非法值到你的对象之前被调用。

如果你想设置初始化过程中你应该做的是一个默认值。



Answer 12:

绝对是的,这是一个不好的实践。

想象一下,你翻过通信网络与第三方(远程,COM,...),这会增加往返,然后点击应用程序的性能。



Answer 13:

在干将状态的变化应该是一个挂罪行。 这意味着,客户端代码必须小心其所访问的getter和setter秩序,要做到这一点就必须有实施的知识。 你应该能够调用任何顺序getter和仍然得到同样的结果。 当装定修改根据对象的当前状态输入的值时,发生一个相关的问题。



Answer 14:

你可以使用一些值保持用于这一目的。 像番石榴库可选类。



文章来源: Is it bad practice to have my getter method change the stored value?