2013-02-02 124 views
-1

当我有一个变量,如exampleVariable,我应该使用getExampleVariable()setExampleVariable(Object value)并使exampleVariable私人而不是ExampleClass.exampleVariableExampleClass.exampleVariable = exampleObject;何时使用getter和setter?

即使getter和setter除了设置变量之外,我通常都会使用getter和setter。

+0

是的。封装决定了这个原理 – Dan

+7

[Pick](http://stackoverflow.com/questions/565095/are-getters-and-setters-evil?rq = 1)[和](http://stackoverflow.com/questions/875033/getters-setters-in-java?rq=1)[选择](http://stackoverflow.com/questions/875033/getters- setters-in-java?rq = 1)[a](http://stackoverflow.com/questions/10407877/what-is-the-point-of-getters-and-setters?lq=1)[重复]( http://stackoverflow.com/questions/1461598/what-is-the-point-of-setters-and-getters-in-java?lq=1)[question](http://stackoverflow.com/questions/ 11883454 /必要的吸气剂方法?lq = 1)! – eboix

+0

@丹虽然有人会将这个原理称为“信息隐藏”。 – Scooter

回答

0

1)只有在需要的时候才使用getter和setter。例如,如果变量不需要被外界读取和写入,则不需要创建/生成getter和setter。类似地,如果外部世界只应读取变量,那么getter应该被定义为不设置。

2)“即使getter和setter除了设置变量也没有做任何事情”:getter和setters中不应该有业务逻辑。他们存在的主要原因是设置变量或变量。

0

是的,因为这有助于抽象,并使代码易于维护。例如,如果你想以某种方式来获取exampleObject,那么保持字段并返回它,并且你不使用getter和setter,那么改变一切将是一件痛苦的事情。

1

我不打算开始火焰战。许多人认为,无论使用什么类,都应该使用setter和getter。 Getters和setter允许在不更改API的情况下向类添加额外的逻辑。可以添加方面等。

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

1

我觉得这有点反过来。我班的对象是否有外部gettable属性?如果是这样,将会有一个getSomething方法。不太常见,该属性需要外部修改,需要使用setSomething方法。

很常见但并非总是最简单最好的表示属性的方法是私有变量something

0

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

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

你相信有人会想要访问这个实例变量吗?如果是这样,那么创建一个getter。如果你不想让某人改变那个对象,那么创建一个防御副本。 1(我会默认始终创建一个防御副本)。

人们应该在整个一生中改变实例吗?如果是这样,那么创建一个setter。还要证明这个类不是线程安全的,可能会随着时间而改变。如果对象不应该改变,那么使实例变量最终并确保它是不可变的。