2013-01-20 35 views
4

我有一个对象,其中构造函数的工作是设置字段,并且在此之后它们不会被设置或更改。不过,我需要一个吸气剂。然后,我是否需要设置setter,即使我不会使用它们“以防万一”,或者我可以删除它们并仅在将值留给构造函数时留下getters?即使我只需要其中一个,我是否应该设置getter和setter?

+4

不要编写不需要的代码。为什么你会呢?这只是浪费时间和更多潜在的错误。 – Mat

+0

我明白了。谢谢你,并为这个愚蠢的问题感到抱歉:) – Straightfw

+0

能够忽略二传手是非常重要的。您正在限制某些操作(即写入)。这是封装。 – Gigi

回答

2

根据java bean规范,省略getter或setter 方法是合法的。所以,如果你从不使用它们,你可以放心地忽略二传手。

+0

非常感谢。我只是不想执行一些OOP错误;) – Straightfw

+2

这个问题与java bean规范有什么关系? – assylias

+0

@assylias不是java bean spec的setters和getters部分吗? – PermGenError

0

如果您想将对象属性设置为只读并在对象的构造函数中初始化它,则不需要setter。如果你想在这个类之外访问这个属性,那么你需要getter。

同时建议您阅读本SO Question

0
下面

是从一个建筑师在谷歌:

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

} 

这里你不需要制定者,一旦你建立你的对象。你不能改变它的状态。

+0

最好也使'a'和'b'字段最终。 – bowmore

+0

是的,你可以做到这一点。 – DarthVader

-1

在某些情况下,只有你会看到它是所有人的选择,因为大多数编辑者可以自动为你添加它们。

如果它是永远不会改变的事情,如果它发生坏事情,那么它不应该有一个setter,应该是一个私有变量。

如果你正在写一些东西来重新使用和分享给别人,那么你确实希望getter和setter在任何地方都可以这样做,因为你不知道其他人可能需要做什么来处理API。

2

如果你的构造函数设置了字段,并且你不需要改变它们,它们听起来像是不可变的。

我会让他们最后,然后只有getters。

如果你忽略了最后的那么你允许某人在将来添加setter。如果你不需要setter,那么你应该强制这个作为你的设计的一部分,并与final字段gettets。

这将使任何阅读代码的人都明白,他们是不可改变的设计。

还有比我们需要编写更多代码的问题。如果你写setter,那么你可以引入错误,因为这个代码可能没有完全测试,因为你不认为它需要

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

这种逻辑保证创建setter。

相关问题