[Effective Java] (14)在公有类中使用访问方法而非公有域

// Degenerate classes like this should not be public
class Point {
    public double x;
    public double y;
}
  • 由于这种类的数据域是可以直接访问的,并没有提供封装(encapsulation)的功能。如果不改变API,就无法改变它的数据表示法,也无法加强任何约束条件,在被访问的时候也无法采取任何辅助的行动。
  • 应该用公有访问方法(getter)和公有设置值方法(setter)的类代替。如下代码所示:
class Point {
    public double x;
    public double y;

    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public double getX() { return x; }
    public double getY() { return y; }

    public void setX() { this.x = x; }
    public void setY() { this.y = y; }
}
  • 如果类可以在它所在包的外部进行访问,就提供访问方法;
  • 如果类是包级私有的,或者是私有嵌套类,直接暴露它的数据并没有本质的错误。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容