Effective Java第二版笔记
notes,to be continued
chapter1
No.1 静态工厂方法代替构造器
example:
1 | public class DemoStatic { |
优点:
- 有方法名
- 不用创建新对象
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扩展枚举类中的方法