使用没有setter的getter

时间:2017-03-14 23:08:32

标签: java

这可能看起来像是一个问题,但我无法以这种特定的方式找到问题。我不明白添加setter如何改进此代码。我知道添加二传手的标准做法,但我不明白为什么。

public class DataHelper extends Activity {

    private final double cards = 52;

    public double getCards(){
        return cards;
    }

2 个答案:

答案 0 :(得分:7)

由于Bcards,因此在此处添加setter将毫无意义:此字段无法更改。

如果它不是final,但您不想允许外部修改, 那么添加一个setter就没有意义了。

如果在您的设计中有意义的话,只允许添加一个setter,以允许对字段进行外部修改。

关于为什么添加setter而不是直接修改字段的问题,答案就是封装。 通过仅通过方法提供访问, 您可以在不影响用户的情况下更改基础实现。

更好的例子是final类。 字体的一个共同特征是大小可以是像素或点。 如果内部表示以点为单位,并将其公开为字段, 然后如果你需要将内部表示更改为像素, 你不能,不影响所有当前用户。 相反,如果你提供一个二传手, 然后你可以自由地改变内部表示而不影响任何人。

提供方法而不是直接访问字段会使选项打开,以便稍后修改类的内部,而不会影响用户。 这是很好的封装,信息隐藏。

答案 1 :(得分:2)

如果您的类将在不需要setter的环境中使用(例如ORM /依赖注入/序列化框架),那么不使用setter就可以了。 在这种特殊情况下,setter没有多大意义,因为变量是final,只设置一次。因此,使用卡片方法获取私有变量的值并不是一个坏主意。