您是否在对象上实现了Cloneable接口?
但是,在极少数情况下,我会使用克隆来复制对象。这样的安全示例之一是array.clone()。我宁愿使用copy-
constructor惯用语,也可以手动复制/分配值。
在有效Java(第二版)中有关于后台问题的Item#11
。可
Object克隆接口是一种特殊的接口,因为它修改了有关克隆的类的行为。基本上,这是启用Java中
编辑: 根据您的示例,在一般情况下,您可能需要将clone()调用包装在CloneNotSupportedException的try-catch中。
Edit2: 改写我的答案
Edit3: 您是否在
public上下文中覆盖了clone()?在您给的示例中,您尝试克隆一个对象,该对象位于java.lang包中-
几乎不包含您的代码所在的包。
Edit4: 我认为答案已经在其他帖子中,只是想对根本问题进行反思。
Edit5: 试试看:
public Object clone1() throws CloneNotSupportedException { return super.clone(); }
Edit6 然后命名您的方法
public abstract Objectcopy(),例如,在实现中,使用super.clone()-避免造成混淆。
Edit7 我做了一些日食,并提出了以下解决方案:
public class Cloner { public static abstract class Person { protected abstract Object clone1() throws CloneNotSupportedException; public Object copy() throws CloneNotSupportedException {return clone1(); } } public static class Employee extends Person implements Cloneable { @Override protected Object clone1() throws CloneNotSupportedException { return super.clone(); } } public static void main(String[] args) throws Exception { new Employee().copy(); }}
但是基本上,这与将抽象方法重命名为clone()之外的其他概念是相同的。
Edit8: 修复了我的示例,现在可以正常运行了。
(但实际要归功于 的Gabor Hargitai 为
super.clone())
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)