Effective Java第二版笔记

notes,to be continued

chapter1

No.1 静态工厂方法代替构造器

example:

1
2
3
4
5
public class DemoStatic {
public static Object demo(Object param) {
return new Object();
}
}

优点:

  • 有方法名
  • 不用创建新对象DemoStatic.demo(new Object());
  • 能返回非公共对象
  • 实例化时代码简洁DemoStatic.demo(new Object());

缺点:

  • 类没有构造器,无法被子类化。推荐多用复合,少用继承
  • 和普通静态方法毫无区别

静态方法的惯用名:

  • valueOf/of 类型转换
  • getInstance 返回实例
  • newInstance 返回新建实例
  • getType 返回对象类型
  • newType 返回新的对象类型

No.2 遇到多个构造器参数时考虑用构造器

如果类的构造器或者静态工厂中有多个参数,设计这种类时,推荐使用builder模式

No.3 用私有构造器或者枚举类型强化单例属性

实现单例的最佳方法:单元素的枚举类型

No.4 通过私有构造器强化不可实例化的能力

创建私有无参构造器,避免编译时默认生成构造器

No.5 避免创建不必要的对象

chapter6 枚举与注解的最佳实践
enum type and annotation type based on jdk1.5

No.30 用enum代替int常量

Java枚举的本质上是int值

No.31 用实例域代替序数

增加排序field

方法java.lang.Enum#ordinal注释中说明了适用于编写 java.util.EnumSet 和 java.util.EnumMap这类数据结构时使用

No.32 用EnumSet代替位域

EnumSet来去重枚举值

No.33 用EnumMap代替序数索引

不推荐用序数索引数组,用EnumMap来实现,若多维数组,用EnumMap<...,EnumMap<...>>实现

No.34 用接口模拟可伸缩枚举

利用interface扩展枚举类中的方法