读书人

Java 中的Clone 学习小结

发布时间: 2012-12-20 09:53:21 作者: rapoo

Java 中的Clone 学习总结
1. 一个类需要实现clone. 一个最佳实践是它需要实现 Cloneable 接口并且提供一个 public clone 方法。

Object 对象的clone 方法是protected。 不重写这个方法, 我们不能够调用一个对象的clone 方法, 除非利用反射。

2. 如果给一个 nonfinal 类重写clone方法。应该通过调用 super.clone获得对象。
因为有个约束, x.clone().getClass() 应该和x.getClass()一致。 所以, 也不要通过构造器去实现clone.

3。当调用clone方法后, 这个类定义的所有属性都回被copy, 并且clone后所有属性的值都会跟那个源对象一样。 如果这个类的所有属性是基本类型或者引用的是不可改变的类型(final) , 就像 String, 那么, 这个clone后获得的对象, 就是我们确切需要的对象。它不需要进一步做任何操作 (当然, 如果某些值是要做唯一性处理的。 也要改)。



但是, 当有fields引用可变的对象时候, 简单的使用上面的实现, 会发生错误。 例如
            // Iteratively copy the linked list headed by this Entry           Entry deepCopy() {           Entry result = new Entry(key, value, next);          for (Entry p = result; p.next != null; p = p.next)                    p.next = new Entry(p.next.key, p.next.value, p.next.next);          return result;}


5. Clone 方法, 不要调用非final 方法。 如果调用的方法被override. 子类调用clone时, 子类的值可能被改变。 所有一般调用final或者private方法。






读书人网 >编程

热点推荐