item13 · 谨慎地覆盖 clone
Cloneable
接口的目的是作为对象的一个 mixin 接口,表明这样的对象允许克隆。但,它并没有成功地达到这个目的,它的主要缺陷在于缺少一个 clone 方法,而 Object
的 clone 方法是受保护的。
Cloneable
作用
- 决定了
Object
中受保护的 clone 方法实现的行为- 如果一个类实现了
Cloneable
接口,Object
的 clone 方法就返回该对象的逐域拷贝 - 如果一个类没有实现
Cloneable
接口,就会抛出CloneNotSupportedException
- 如果一个类实现了
- 对于
Cloneable
接口,它改变了超类中受保护的方法的行为。不值得效仿 - 事实上,实现
Cloneable
接口的类是为了提供一个功能适当的公有的 clone 方法。
clone 方法规范
-
为了达到上述目的,类及其所有超类都必须遵守一个相当复杂的、不可实施的、并且基本上没有文档说明的协议。由此得到一种语言之外(依赖底层实现)的机制:它无需构造器就可以创建对象。
-
clone 方法的通用约定是非常弱的,下面是摘自 <