2013-07-15 32 views
6

现在我正在创建一个可以保存我的配置的类的负载,就是这样。我所做的只是存储配置文件中的值。最终变量的获取者

超过一半的代码是getters,我想知道该练习是否仍然有getters或直接访问变量。

所以这个:

public myClass 
{ 
    public myClass(String name) 
    { 
     this.name = name; 
    } 

    final String name; 

    public final String getName() 
    { 
     return name; 
    } 
} 

或者:

public myClass 
{ 
    public myClass(String name) 
    { 
     this.name = name; 
    } 

    public final String name; 
} 

看来真的很傻有所有的干将那里时,他们实际上并没有做任何事情,只是返回的变量。但是我被告知,无论如何要让getter在那里是很常见的Java实践。

+1

无论如何,编译器都会内联它们。尽管我会利用java.util.Properties来处理你正在做的事情。 – jlordo

+2

使用最终变量时,它可能看起来很愚蠢,但如果你有非最终变量和子类具有相同的变量名称定义,并且你尝试访问这些变量,那么你会看到没有get/set会有多混淆。正确的封装始终是最佳实践。 – kosa

+0

@jlordo这是我给的一个非常简单的例子。 '属性'是不适合我在做什么:) – Cheetah

回答

11

的getter封装的数据可以提供多种优势,包括:

  • 您可以现场更改为其他表示,在不影响呼叫者。
  • 您可以在getter中添加额外的代码。
  • 您可以实现提供获取者的接口。
  • 即使不是final,您也可以提供字段的只读访问权限。
+1

这样做的最重要原因是你在答案中解释的[coupling](http://en.wikipedia.org/wiki/Coupling_%28computer_programming%29)。 –

+0

@LuiggiMendoza你能否进一步解释关于getters/setters的耦合? –

+2

有更多的代码耦合到类的表示使得更多的工作来改变这种表示。封装隐藏了接口后面的内部表示,随着表示的变化,接口可以保持不变。 –

0

我所知道的做法是,你可以使用公共静态最终场与不变类型,如System.out例如。但是,我确实将获得者添加到实例字段

我同意你的意见,但是最后几乎没有什么伤害String。不过,请注意可变类型。此外,由于IDE中有内联和代码生成,因此getters的成本往往相当小,无论是编写代码还是运行时。