[Effective Java] (13)使类和成员的可访问性最

2018-05-09  本文已影响0人  QyQiaoo
1. 四种访问级别
关键字 描述
private 只有在声明该成员的顶层类内部才可以访问这个成员
package-private (default) 声明该成员的包的内部的任何类都可以访问这个成员
protected 声明该成员的类的子类可以访问这个成员,并且声明该成员的包内部的任何类也可以访问这个成员
public 任何地方都可以访问该成员
2. 访问控制机制

注:长度非零的数组总是可变的,类具有共有的静态final数组域,或者返回这种域的访问方法,几乎总是错误的。这是安全漏洞的一个常见根源:

// Potential security hole!
public static fianl Thing[] VALUES = { … };

修正方法:

  1. 公有数组变为私有的,并增加一个公有的不可变列别:
private static final Thing[] PRIVATE_VALUES = { … };
public static final  List<Thing> VALUES = 
        Collections.unmodifiableList(Arrays.asLIst(PRIVATE_VALUES));
  1. 使数组变成私有的,并添加一个公有方法,它返回私有数组的一个备份
private static final Thing[] PRIVATE_VALUES = { … };
public static fianl Thing[] values() {
    return PRIVATE_VALUES.clone();
}

总结:应该尽可能地降低可访问性。在仔细地设计一个最小的公有API之后,应该防止把任何散乱的类、接口和成员变成API的一部分,除公有静态final域的特殊情形之外,共有类都不应该包含公有域,并且要确保公有静态final域所引用的对象都不是可变的

上一篇下一篇

猜你喜欢

热点阅读