即使我只需要其中一个,我应该设置getter和setter吗?

时间:2013-01-20 19:10:05

标签: java

我有一个对象,其中构造函数的工作是设置字段,之后不会设置或更改它们。但是,我需要一个吸气剂。那么,我是否需要设置setter,即使我不会使用它们“以防万一”或者我可以删除它们并且只留下getter而将值设置为构造函数?

6 个答案:

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

这种逻辑保证创建二传手。