[Java] 对clone的控制

来源:互联网 发布:高等数学网络课程 编辑:程序博客网 时间:2024/05/21 22:25
所有使用clone方法的类,不论是继承Object.clone()还是覆盖它,都必须实现一个名为cloneable的接口。如果你打开java类库查一下,会发现这个接口里什么也没有,它仅仅是表明某个类具有被clone的能力。

你在设计自己的类时,有以下几种风格来控制clone能力:
  1. 不理会clone(),也就是在你的类中不涉及任何有关clone()的内容,如果有人想实现clone功能,必须写一个子类并完成刚才所说的要求。这适合于Object.clone()可以胜任复制你的类中全部字段的情况。
  2. 支持clone()。你在你的类中实现cloneable接口并且覆盖clone方法以及捕获相应的异常。
  3. 有条件的支持clone()。这种情况有些特殊,也就是你的类中保存着一些可能不能被复制的对象的引用(这里是指它们没有实现cloneable)。这时候你只是在clone()中复制所有这些对象,如果遇到异常,抛出所有这些异常给使用你的类的人。举个例子,假设你在写一个类似于ArrayList的类,你不知道别人会在把什么样的对象保存在你的ArrayList里,所以你也不知道他们是否能够被复制。
  4. 不实现cloneable接口但覆盖clone方法为protected。这样你虽然让你的类不能被复制,但却提供了正确的clone方法,这样如果有人想复制你的类,写一个子类实现cloneable接口就行了。
  5. 不实现cloneable接口并覆盖clone方法直接抛出异常来防止你的类被复制。不过这并不是根本的解决方法,只能对付那些直接调用你的clone方法或是在子类中调用super.clone()的人。
  6. 使用final修饰你的类来防止你的类被复制。如果你的超类中有覆盖clone方法的,再重新覆盖clone方法并直接抛出异常。这也是最彻底的办法。


原文:http://www.frontfree.net/view/article_675.html

原创粉丝点击