繁体   English   中英

使用没有setter的getter

[英]Using a getter without a setter

这似乎是一个已经问过的问题,但我找不到以这种特定方式提出的问题。 我不明白添加setter如何改进此代码。 我知道添加setter是标准做法,但我不明白为什么。

public class DataHelper extends Activity {

    private final double cards = 52;

    public double getCards(){
        return cards;
    }

由于cardsfinal ,在这里添加一个setter是没有意义的:这个字段不能改变。

如果它不是final ,但你不想允许外部修改,那么添加setter将毫无意义。

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

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

一个更好的例子是Font类。 字体的一个共同特征是大小可以是像素或点。 如果内部表示以点为单位,并将其作为字段公开,那么稍后如果需要将内部表示更改为像素,则不能影响所有当前用户。 相反,如果您提供了一个setter,那么您可以自由地更改内部表示而不会影响任何人。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM