《Effective Java》第 16 条:要在仅有类中使用访问方法而非公有域
《Effective Java》第 16 条:要在仅有类中使用访问方法而非公有域
一、 问题
有时候我们需要定义一些类用来集中实例域(Java 对象中的数据)。经常我们会把这些数据域声明为 public,可以被直接访问。这样公有类暴露了它的数据域,有以下两个缺点:
1、要想在将来改变其内部表示法是不可能的,因为公有类的客户端代码已经遍布各处了
二、分析
复制代码
上面数据域是可以被直接访问,没有提供封装功能,我们应该用包含私有域和公有方法的类代替
复制代码
公有类不应该直接暴露数据域,如果类是包级私有的,或是私有的嵌套类,可以直接暴露它的数据域。如果公有类想暴露它的数据域怎么办?可以将数据域设置为不可变的,如下例:
复制代码
这个类确保了每个实例都表示一个有效时间。
三、总结
简而言之,公有类永远都不应该暴露可变的域。
版权声明: 本文为 InfoQ 作者【okokabcd】的原创文章。
原文链接:【http://xie.infoq.cn/article/3e14ff52af515e2dee31a6d96】。文章转载请联系作者。
评论