这个clone()有什么问题?

这个clone()有什么问题?,第1张

这个clone()有什么问题?

您是否在对象上实现了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()



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5121923.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存