effective java(14) 之在公有类中使用访问方法而非公有域
2017-10-18 21:11
411 查看
effective java 之在公有类中使用访问方法而非公有域
1、如何理解这句话:
我们不能这样做,
Class Point {
public double x;
public double y;
}
Point类的数据域是可以直接被访问的,这样的类没有提供封装。
如果不改变API,就无法改变它的数据表示法(比如,使用一个比double更高精度的类来表示x和y),也无法强加任何约束条件(比如以后我们可能会希望x和y不会超过某个值)。
如何做?应该这样
2、使用私有域和公有访问方法的公有类是比较合适的。在它所在的包的外部访问时,提供访问方法,以保留将来改变该类的内部表示法的灵活性。
3、让公有类暴露域不是好办法,但如果域是不可变的,这种做法的危害会较小
只有初始化的时候可以为hour和minute域赋值,其他的方法或者外部类都不能修改这两个域。
4、公有类永远都不应该暴露可变的域。
虽然还是有问题,但是让公有类暴露不可变的域其危害比较小。但是,有时候会需要用包级私有的或者私有的嵌套类来暴露域,无论这个类是可变还是不可变的。
每天努力一点,每天都在进步。
1、如何理解这句话:
我们不能这样做,
Class Point {
public double x;
public double y;
}
Point类的数据域是可以直接被访问的,这样的类没有提供封装。
如果不改变API,就无法改变它的数据表示法(比如,使用一个比double更高精度的类来表示x和y),也无法强加任何约束条件(比如以后我们可能会希望x和y不会超过某个值)。
如何做?应该这样
Class Point { private double x; private 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(double x) { this.x = x; } public void setY(double y) { this.y = y; } }
2、使用私有域和公有访问方法的公有类是比较合适的。在它所在的包的外部访问时,提供访问方法,以保留将来改变该类的内部表示法的灵活性。
3、让公有类暴露域不是好办法,但如果域是不可变的,这种做法的危害会较小
public final class Time { private static final int HOURS_PER_DAY = 24; private static final int MINUTES_PER_HOURS = 60; public final int hour;// hour是不可变域 public final int minute;// minute是不可变域 public Time(int hour, int minute) { // 无法改变类的表示法,但是可以强加约束条件 if (hour < 0 || hour > HOURS_PER_DAY) throw new IllegalArgumentException("Hour: " + hour); if (minute < 0 || minute >= MINUTES_PER_HOUR) throw new IllIllegalArgumentException("Minute: " + minute); this.hour = hour; this.minute = minte; } }
只有初始化的时候可以为hour和minute域赋值,其他的方法或者外部类都不能修改这两个域。
4、公有类永远都不应该暴露可变的域。
虽然还是有问题,但是让公有类暴露不可变的域其危害比较小。但是,有时候会需要用包级私有的或者私有的嵌套类来暴露域,无论这个类是可变还是不可变的。
每天努力一点,每天都在进步。
相关文章推荐
- effective java读书笔记14:在公有类中使用访问方法而非公有域
- Effective Java 第14条:在公有类中使用访问方法而非公有域
- 【Effective Java】Ch4_Class:Item14_在public类中应该使用访问方法而不是public域
- Effective Java(使类和成员的可访问性最小化、在公有类中使用访问方法而非公有域)
- Effective Java:Ch4_Class:Item14_在public类中应该使用访问方法而不是public域
- Effective Java(使类和成员的可访问性最小化、在公有类中使用访问方法而非公有域)
- Effective Java(使类和成员的可访问性最小化、在公有类中使用访问方法而非公有域)
- 一分钟简单了解Effective java - 第14条 在共有类中使用访问方法而非公有域
- Effective Java(使类和成员的可访问性最小化、在公有类中使用访问方法而非公有域)
- Effective Java(使类和成员的可访问性最小化、在公有类中使用访问方法而非公有域)
- 学习effective java-14类和接口之在公有类中使用可访问的方法,而不是使用公有域
- Effective Java(使类和成员的可访问性最小化、在公有类中使用访问方法而非公有域)
- Effective Java(使类和成员的可访问性最小化、在公有类中使用访问方法而非公有域)
- 《Effective java》读书记录-第14条-在公有类中使用访问方法而非公有域
- Effective Java(使类和成员的可访问性最小化、在公有类中使用访问方法而非公有域)
- EffectiveJava(14)在公有类中使用访问方法而非公有域
- Effective Java(使类和成员的可访问性最小化、在公有类中使用访问方法而非公有域)
- 第14条:在公有类中使用访问 方法而非公有域
- Effective Java(使类和成员的可访问性最小化、在公有类中使用访问方法而非公有域)
- 第十四条:在公有类中使用访问方法而非公有域