Effective Java 第三版笔记

2019-03-14  本文已影响0人  yanix4536

1、考虑以静态工厂方法代替构造函数

优点:
静态工厂方法有确切名称;
静态工厂方法不需要在每次调用时创建新对象;
可以通过静态工厂方法获取返回类型的任何子类的对象;
返回对象的类可以随调用的不同而变化,作为输入参数的函数;
当编写包含方法的类时,返回对象的类不需要存在。 


缺点:
没有公共或受保护构造函数的类不能被子类化;(优先考虑复合而不是继承)
程序员很难找到它们;(from,of,valueOf,getInstance,newInstance,getType,newType,type)

2、当构造函数有多个参数时,考虑改用构建器

3、使用私有构造函数或枚举类型强化Singleton属性

4、用私有构造函数实施不可实例化

5、依赖注入优于硬连接资源

6、避免创建不必要的对象

7、排除过时的对象引用

8、避免使用终结器和清除器

9、使用 try-with-resources 优于 try-finally

在使用必须关闭的资源时,总是优先使用 try-with-resources,而不是 try-finally。前者的代码更短、更清晰,生成的异常更有用。使用 try-with-resources 语句可以很容易地为必须关闭的资源编写正确的代码,而使用 try-finally 几乎是不可能的。

10、覆盖 equals 方法时应遵守的约定

反身性:对于任何非空的参考值 x,x.equals(x) 必须返回 true。
对称性:对于任何非空参考值 x 和 y,x.equals(y) 必须在且仅当 y.equals(x) 返回 true 时返回 true。
传递性:对于任何非空的引用值 x, y, z,如果 x.equals(y) 返回 true,y.equals(z) 返回 true,那么 x.equals(z) 必须返回 true。
一致性:对于任何非空的引用值 x 和 y, x.equals(y) 的多次调用必须一致地返回 true 或一致地返回 false,前提是不修改 equals 中使用的信息。
非空性:对于任何非空引用值 x,x.equals(null) 必须返回 false。


警告:
当你覆盖 equals 时,也覆盖 hashCode。
不要自作聪明。 一般来说,考虑到任何形式的混叠都不是一个好主意。
不要用另一种类型替换 equals 声明中的对象。


上一篇下一篇

猜你喜欢

热点阅读