03-类和接口(15-25)

15. 使类和成员的可访问性最小化

尽可能使每个类或成员不被外界访问。

公有类的实例域决不能是公有的。

包含公有可变域的类通常并不是线程安全的。

让类具有公有的静态 final 数组域,或者返回这种域的访问方法,这是错误的。

16. 要在公有类而非公有域中使用访问方法

如果类可以在它所在的包之外进行访问,就提供访问方法。

如果类是包级私有的,或是私有的嵌套类,直接暴露它的数据域并没有本质的错误。

17. 使可变性最小化

不要提供任何会修改对象状态的方法,也成为设值方法。

保证类不会被扩展。

声明所有的域都是 final 的。

声明所有的域都是私有的。

确保对于任何可变组件的互斥访问。

不可变对象本质上是线程安全的,他们不要求同步。

18. 复合优先于继承

继承打破了封装性。

19. 要么设计继承并提供说明文档,要么禁止继承

对于为了继承而设计的类,唯一的测试方法就是编写子类。

必须在发布类之前先编写子类对类进行测试。

构造器决不能调用可被覆盖的方法。

20. 接口优于抽象类

现有类可以很容易被更新,以实现新的接口。

接口是定义 mixin 混合类型的理想选择。

接口允许构造非层次结构的类型框架。

接口使得安全的增强类的功能成为可能。

21. 为后代设计接口

java8 的接口中增加了 缺省方法,即默认方法。

22. 接口只用于定义类型

常量接口模式是对接口的不良使用。

23. 类层次优于标签类

标签类过于冗长、容易出错,并且效率低下。

24. 静态成员类优于非静态成员类

如果声明成员类不要求访问外围实例,就要始终把修饰符 static 放在它的声明中。

25. 限制源文件为单个顶级类

永远不要把多个顶级类或者接口放在一个源文件中。


03-类和接口(15-25)
https://janycode.github.io/2020/09/16/02_编程语言/01_Java/04_EffectiveJava/03-类和接口(15-25)/
作者
Jerry(姜源)
发布于
2020年9月16日
许可协议