《Effective java》读书记录-第14条-在公有类中使用访问方法而非公有域
来源:互联网 发布:淘宝手工单如何导入 编辑:程序博客网 时间:2024/05/20 02:24
设计共有类时,坚持面向对象程序设计思想是正确的。如果类可以在它所在的包的外部进行访问,就提供访问方法,以保留将来改变该类的内部表示法的灵活性。
public class Point1 { public double x; public double y;}
public class Point2 { private double x; private double y; public double getX() { return x; } public Point2 setX(double x) { this.x = x; return this; } public double getY() { return y; } public Point2 setY(double y) { this.y = y; return this; }}Point1暴露了它的数据域,将来如果要改变其内部表示法是不可能的,因为共有类的客户端已经遍布各处了;而Point2就不会出现这些问题了。
如果类是包级私有的,或者是私有的嵌套类,直接暴露它的数据域并没有本质的错误--假设这些数据域确实描述了该类所提供的抽象。
Java平台类库中有几个违反了“公有类不应该直接暴露数据域”的告诫。典型代表是java.awt.Point和java.awt.Dimension,这些都是反面例子。
让公有类直接暴露域从来都不是好办法,但是如果域是不可变的,那么危害会小点。就像下面的代码:
public class Time { private static final int HOURS_PRE_DAY=24; private static final int MINUTES_PRE_HOUR=60; public final int hour; public final int minute; public Time (int hour,int minute) { if(hour<0 || hour>HOURS_PRE_DAY) throw new IllegalArgumentException("Hour:"+hour); if(minute<0 || minute>MINUTES_PRE_HOUR) throw new IllegalArgumentException("Minute:"+minute); this.hour=hour; this.minute=minute; }}只有初始化的时候可以为hour和minute域赋值,其他的方法或者外部类都不能修改这两个域。
总之,公有类永远都不应该暴露可变的域。虽然还是有问题,但是让公有类暴露不可变的域其危害比较小。但是,有时候会需要用包级私有的或者私有的嵌套类来暴露域,无论这个类是可变还是不可变的。
0 0
- 《Effective java》读书记录-第14条-在公有类中使用访问方法而非公有域
- Effective Java 第14条:在公有类中使用访问方法而非公有域
- 第14条:在公有类中使用访问方法而非直接使用公有域
- effective java(14) 之在公有类中使用访问方法而非公有域
- 第14条:在公有类中使用访问方法而非公有域
- 第14条:在公有类中使用访问方法而非公有域。
- Effective Java之在公有类中使用访问方法而非公有域(十四)
- Effective Java 类和接口 14.在公有类中使用访问方法而非公有域
- EffectiveJava(14)在公有类中使用访问方法而非公有域
- ( 14 ) : 在公有类中使用访问方法而非公有域
- Effective Java(使类和成员的可访问性最小化、在公有类中使用访问方法而非公有域)
- 在公有类中使用访问访问方法而非公有域
- 在公有类中使用访问方法而非公有域
- 在公有类中使用访问方法而非公有域
- 在公有类中使用访问方法而非公有域。
- Java学习笔记11:在公共类中使用访问方法而非公有域
- 学习effective java-14类和接口之在公有类中使用可访问的方法,而不是使用公有域
- 《Effective java》读书记录-第23条-请不要在新代码中使用原生态类型
- UITableView的折叠收缩和QQ好友分组效果
- Linux C Socket编程原理及简单实例
- Masonry布局框架的使用
- Intent数据传递
- nginx
- 《Effective java》读书记录-第14条-在公有类中使用访问方法而非公有域
- PHP 接口和抽象类的区别实例
- c# GDI+简单绘图(一)
- 如何查看服务消耗的cpu,堆内存等
- iOS/object-c: 枚举类型 enum,NS_ENUM,NS_OPTIONS
- Java enum的用法详解
- sparksql语法,通过映射方式读txt
- QT 通过一个http链接 打开一个浏览器和对应的网页
- SQL基本语法