[Effective Java] Note: - Chapter-3-3: Java toString() Considerations
最好给toString()方法返回的字符串定义一种规范格式,并写好注释文档。并且给toString()方法涉及的每一个成员域都提供一个访问方法,以避免toString()方法的返回值因为被客户端程序员解析使用,而变相成为API的一部分。
[Effective Java] Note: - Chapter-3-3: Comparable Interface
Comparable接口和equals()方法的约定很像,一样要老老实实逐域比较。
[Effective Java] Note: - Chapter-3-2: Be careful with clone() method
Cloneable接口的通用约定很弱,新建对象,然后逐域浅拷贝就能满足。所以Object的clone()方法实现的就是浅拷贝。但浅拷贝只对基本型和不可变对象有效。因为基本型没有引用,直接复制值。不可变对象只读不写也不受影响,而且来就是要控制实例,复制引用正合适。但可变对象如果是浅拷贝就不行。还需要另外重新调整,比如递归调用可变对象的clone()方法。这章第二个关键点,就是对Cloneable接口的继承问题。惯用法是,尽量让Object#clone()方法替我们工作。因此当一个类需要实现clone()方法,理想的情况就是它的所有超类的clone()方法都递归调用了super.clone()方法,最终成功追溯到Object#clone()方法。
[Effective Java] Note: - Chapter-3-1: How to code equals() and hashCode() method ?
equals()的五大通用约定
equanls()反映的是实例的逻辑相等(Logical Equality)。根据Java语言规范,“值相等”的等价性(equivalence relation)隐含五大通用约定:
自反性(reflexive):任何非null的值,x.equals(x)必须返回true。
对称性:任何非null的值,y.equals(x)为真,那么x.equals(y)也必须为真。
传递性:对任何非null的值,如果x.equals(y)为真,且y.equals(z)为真,那么x.equals(z)也必须为真。
一致性:对任何非null的值,多次调用x.equals(y)必须返回相同的结果。
非空性:所有null的值,x.equals(null)必...
[Effective Java] Note: - Chapter-2-2: Instance-Control
一个普遍原则是尽量避免生产不必要的对象,能用已有实例就用已有实例。有些情况甚至要将实例数量控制在一定范围之内。最极端的情况就是单例器Singleton,全局只存在唯一的实例。所以这一篇的主题是怎么控制构造器的访问权限,怎么重复利用有限数量的实例。
[Effective Java] Note: - Chapter-2-1: Create Instances with Factory Method or Builder Pattern
静态工厂方法可以为生产实例提供可观的灵活性,也可以进行实例控制。而且静态工厂方法还有利于简化公开接口,隐藏额外子类的好处。如果类的构造器或者静态工厂中具有多个参数,推荐使用Builder模式。它和静态工厂方法一样,也能为实例创建提供了很大的灵活性,以及保障了代码的可读性。而且它还比JavaBeans模式更安全。
共计 48 篇文章,6 页。