Effective Java-类和接口

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

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

  • 除了公有静态final域的特殊情况之外,公有类都不应该包含公有域。并且要确保公有静态final域所引用的对象都是不可变的。

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

如果类在它所在的包的外部进行访问,就提供访问方法,以保留将来改变该类的内部表示法的灵活性。

使可变性最小化

  1. 不要提供任何会修改对象状态的方法。(可以返回一个新对象)

  2. 保证类不会被扩展

  3. 使所有域都是final的

  4. 使所有的域都成为私有的

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

复合优先于继承

要么为继承而设计,并提供文档说明,要么就禁止继承

  • 为了允许继承,构造器,clone,readObject等,都不能调用可被覆盖的方法

接口优于抽象类

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

  • 接口定义是mixin的理想选择

  • 接口允许我们构造非层次接口的类型框架

接口只用于定义类型

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

  • 接口应该只被用来定义类型,它们不应该被用来导出常量

类层次优于标签类

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

  • 标签类正是类层次的一种简单仿效。

  • 可以通过抽象类和子类的继承方式替代标签类。

用函数对象表示策略

优先考虑静态成员类

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

  • 私有静态成员类的一种常见用法是用来代表外围类所代表的对象的组件。

你可能感兴趣的:(Effective Java-类和接口)