栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

这个clone()有什么问题?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

这个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()



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/435191.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号