复制构造函数与clone
前言
对一个对象的复制,通常实现Cloneable
接口使用clone
方法。
但这有一个设计缺陷。Cloneable
没有clone
方法,反而在Object
里面调用了native
修饰的clone
方法。
缺陷
1 | public interface Cloneable { |
很明显看到,Cloneable
是一个空接口,实现Cloneable
只是为了在调用clone
方法时,不抛出CloneNotSupportedException
异常。
而且使用的是native
修饰的clone
方法,对应用开发者是透明的,开发者对clone
方法不可控。
使用复制构造函数解决
Josh Bloch推荐使用复制构造函数来实现clone
功能,实际上,HashMap
也通过复制构造函数进行clone。
1 | // java.util.HashMap |