EffectiveJava(14)在公有类中使用访问方法而非公有域

1.公有类永远都不应该暴露可变的域.如果域是不可变的,暴露公有类的危害就要小一些.
但是,有时候需要用包级私有的或者私有的嵌套类来暴露域,无论这个类是否可变
2.如果公有类暴露了它的访问域,要想在将来改变其内部表示法是不可能的,因为公有类的客户端代码已经遍布隔出来

当域被读取的时候,强加约束

public final class TimeManager {
    private static final int HOURS_PER_DAY = 24;
    private static final int MINUTES_PER_HOURS = 60;

    public final int hour;
    public final int minute;

    public TimeManager(int hour,int minute){
        //当公有类的暴露域被读取的时候,强加约束
        if(hour < 0 || hour >= HOURS_PER_DAY)
            throw new IllegalArgumentException("hour:" + hour);
        if(minute<0||minute>=MINUTES_PER_HOURS)
            throw new IllegalArgumentException("min:"+minute);
        this.hour = hour;
        this.minute = minute;
    }
}
原文地址:https://www.cnblogs.com/qwop/p/6637299.html