我有一个对象,其中构造函数的工作是设置字段,之后不会设置或更改它们。但是,我需要一个吸气剂。那么,我是否需要设置setter,即使我不会使用它们“以防万一”或者我可以删除它们并且只留下getter而将值设置为构造函数?
答案 0 :(得分:2)
根据 java bean规范,省略getter或setter是合法的 方法。所以,如果你从不使用它们,你可以安全地省略setter
答案 1 :(得分:2)
如果您的构造函数正在设置字段而您不需要更改它们,则它们听起来像是不可变的。
我会让他们成为最终,然后才有吸气剂。
如果省略最后一个,那么您将来允许某人添加setter。如果您不需要setter,那么您应该将其作为设计的一部分来强制执行,并使用final字段进行gettets。
这将使任何阅读代码的人都明白它们是不可变的设计。
还有编写比我们需要的更多代码的问题。如果您编写setter,那么您可能会引入错误,因为此代码可能无法完全测试,因为您认为不需要
答案 2 :(得分:0)
如果要将object属性用作只读并在对象的构造函数中初始化它,则不需要setter。如果你想在这个类之外访问这个属性,那么你需要getter。
还建议您阅读此SO Question
答案 3 :(得分:0)
以下是来自Google的架构师:
class Foo{
private int a;
private int b;
public Foo(int num1, int num2){
a= num1;
b= num2;
}
public int getA(){
return a;
}
public int getB(){
return b;
}
}
在这里你不需要setter和构建你的对象。你不能改变它的状态。
答案 4 :(得分:-1)
只有你会看到它的所有个人选择,因为大多数编辑都可以自动添加它们。
如果它是永远不会改变的东西,如果它发生了坏事,那么它就不应该有一个setter而应该是一个私有变量。
如果您正在撰写有关重复使用和与他人分享的内容,那么您确实希望在任何地方都可以使用getter和setter,因为您不知道其他人可能需要对您的API做些什么
答案 5 :(得分:-1)
我认为这取决于你的构造函数在做什么。如果你的构造函数只是对变量进行原始设置,那么我认为你不需要为它们包含setter。
但是,如果您的构造函数代码在设置变量值之前执行任何类型的业务逻辑,那么我认为这需要至少为相关变量创建一个setter(如果不是全部的话)。
例如,如果构造函数代码执行此操作,则不要包含任何setter:
public MyClass( String varA, String varB, int varC )
{
this.varA = varA;
this.varB = varB;
this.varC = varC;
}
但如果您的代码执行此操作,则应该包含一个setter来解耦逻辑并使其更清晰:
public MyClass( String varA, String varB, int varC )
{
if ( varA == null )
{
this.varA = '(empty)';
}
else
{
this.varA = varA;
}
this.varB = varB;
if ( varC < 0 )
{
callSomeMethod();
}
this.varC = varC;
}
这种逻辑保证创建二传手。