什么时候使用getter和setter?

时间:2013-02-02 02:37:36

标签: java variables setter getter

如果我有变量,例如exampleVariable,我应该使用getExampleVariable()setExampleVariable(Object value)并将exampleVariable设为私有,而不是ExampleClass.exampleVariable和{{1} }?

我通常一直使用getter和setter,即使getter和setter除了设置变量之外什么都不做。

5 个答案:

答案 0 :(得分:1)

我不打算开始一场火焰战。很多人认为无论使用何种类,你都应该总是使用setter和getter。 getters和setter允许在不更改API的情况下为类添加额外的逻辑。可以添加方面等等。

就个人而言,我更喜欢更实用的方法:除非你正在编写一个库,否则如果你不需要额外的逻辑,就不要编写getter和setter。一旦需要,将普通成员重构为getter和setter代码非常简单。

答案 1 :(得分:1)

我反过来想到了这一点。我班级的对象是否应具有外部gettable属性?如果是,则会有getSomething方法。不太常见的是,该属性需要外部修改,需要setSomething方法。

通常,但并非总是如此,表示属性的最简单,最好的方法是私有变量something

答案 2 :(得分:0)

是的,因为这有助于抽象并使您的代码易于维护。 例如,如果你想做一些事情,以某种方式获取exampleObject,然后保持为一个字段并返回它,而你没有使用getter和setter,那么改变一切都会很痛苦。

答案 3 :(得分:0)

1)仅在需要时使用getter和setter。例如,如果变量不需要由外部世界读取和写入,则不需要创建/生成getter和setter。类似地,如果外部世界应该只读取变量,则应该定义getter而不是setter。

2)“即使getter和setter除了设置变量之外什么都不做”:getter和setter中应该没有业务逻辑。它们存在的主要原因是设置变量或变量。

答案 4 :(得分:0)

Getters和setter并不总是直截了当,特别是在编写库API时。让我们考虑一下这样一种情况,即从公开访问变量的api开始。如果您希望稍后在设置该变量之前执行某些操作,则必须将其更改为getter或setter模式。这将打破使用你的api的每个人。如果你从getter和setter开始,api不会改变。你可以写下你的改变。

这是我在编写新课程时使用的一般规则。

您认为有人会想要访问此实例变量吗?如果是这样,那么创建一个getter。如果您不希望有人更改该对象,请创建一个防御性副本。1(我默认始终创建一个防御性副本)。

人们是否应该在整个生命周期内更改实例?如果是这样,那么创建一个setter。还记录了这个类不是线程安全的,可能会随着时间而改变。如果对象不应该更改,请将实例变量设为final并确保它是不可变的。