Sur*_*nga 68 lazy-loading class lazy-evaluation getter-setter
在我的班级中更改我的getter方法(如版本2)是不好的做法.
版本1:
public String getMyValue(){
return this.myValue
}
Run Code Online (Sandbox Code Playgroud)
版本2:
public String getMyValue(){
if(this.myValue == null || this.myValue.isEmpty()){
this.myValue = "N/A";
}
return this.myValue;
}
Run Code Online (Sandbox Code Playgroud)
fgy*_*ica 116
我认为如果你的getter方法改变了对象的内部状态,那实际上是非常糟糕的做法.
为了达到同样的,我建议刚回国的"N/A"
.
foo.getMyValue()
可能实际上改变了行为foo
.另外,从翻译null
到"N/A"
可以在做二传手,即内在价值可以设置为"N/A"
,如果null
获得通过.
一般说法:
我只会添加一些状态,例如"N/A"
某些API或依赖于您的代码的其他实例所期望的状态.如果不是这种情况,您应该依赖编程语言中可用的标准null类型.
Vin*_*rat 38
在我看来,除非你在做lazy-loading
(你不是那种情况),否则吸气者不应该改变价值.所以我要么:
将更改放入setter
public void setMyValue(String value) {
if(value == null || value.isEmpty()){
this.myValue = "N/A";
} else {
this.myValue = value;
}
}
Run Code Online (Sandbox Code Playgroud)
或者,如果未正确设置值,则使getter返回默认值:
public String getMyValue() {
if(this.myvalue == null || this.myvalue.isEmpty()){
return "N/A";
}
return this.myValue;
}
Run Code Online (Sandbox Code Playgroud)
在延迟加载的情况下,我会说在getter中更改你的成员很好,你会做类似的事情:
public String getMyValue() {
if (this.myvalue == null) {
this.myvalue = loadMyValue();
}
return this.myValue;
}
Run Code Online (Sandbox Code Playgroud)
hqt*_*hqt 10
是.这是一个不好的做法.
为什么?
当该值被导入到对象(在构造函数,或setter方法),这些值将被验证,不验证直到吸气方法被调用.而且,如果有人小心,他们也会为这个值创建一个完整的私有验证方法.
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";
}
}
Run Code Online (Sandbox Code Playgroud)
而且,在getter方法中,永远不要改变值的状态.我曾经在一些项目上工作过,而且经常必须将getter设置为private
:此方法不能改变内部状态.
至少,如果你不想让事情变得复杂,在getter方法中,你应该返回 "N/A"而不是改变内部状态,将myValue设置为"N/A".
我通常定义一个特定的getter
.
永不改变原件getter
:
public String getMyValue(){
return this.myValue
}
Run Code Online (Sandbox Code Playgroud)
并创建一个具体的getter
:
public String getMyValueFormatted(){
if(this.myvalue == null || this.myvalue.isEmpty()){
return "N/A";
}else{
return this.myValue;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为最好初始化this.myValue = "N/A"
.并且随后的调用setMyValue
应该this.myValue
根据您的业务条件进行修改.
本getMyValue
不应该以任何方式修改this.myValue
.如果您需要返回某个值,则应该返回该值(如"N/A")而不是更改this.myValue
.Getters不得修改成员的价值.
归档时间: |
|
查看次数: |
5002 次 |
最近记录: |