当前位置:  开发笔记 > 编程语言 > 正文

Java:Cloneable接口的基本原理

如何解决《Java:Cloneable接口的基本原理》经验,为你挑选了4个好方法。

为什么界面中没有.clone()指定方法java.lang.Cloneable



1> Bill the Liz..:

基本上,它是一个破碎的界面.Ken Arnold和Bill Venners在Java设计问题中讨论了它.

阿诺德:

如果我在这一点上成为上帝,很多人可能很高兴我不是,我会说弃用Cloneable并且有一个Copyable,因为Cloneable有问题.除了它拼写错误的事实,Cloneable不包含clone方法.这意味着您无法测试某些内容是否是实例Cloneable,将其转换为Cloneable和调用clone.你必须再次使用反射,这很糟糕.这只是一个问题,但我肯定会解决.


它被"打破",因为有几个人这么说?"Cloneable不包含克隆方法"是的,它的文档从未说过它会."这意味着您无法测试某些东西是否是Cloneable的实例,将其强制转换为Cloneable,并调用clone." 再说一次,这根本不是"Cloneable"的目的.`Cloneable`只是让`Object.clone()`抛出异常.它从来就不是你调用`clone`的接口.如果Java有这样的接口可能会很好,但缺少一个不会使另一个接口(`Cloneable`)破坏.
@newacct只是因为它的行为与其文档相匹配并不能使它成为一个好的界面.我想如果您的代码不起作用,您只需更改文档?

2> David M..:

请参阅Java错误数据库中的此错误:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4098033

从本质上讲,这是Java早期版本中的一个设计缺陷,它们不打算在Cloneable接口中修复,因为这样做会破坏与某些现有代码的兼容性.



3> Peter Perháč..:

在Java中,有标记接口的概念.该Cloneable接口没有方法或字段,仅用于标识可克隆的语义.

来自dev-x网站:

通常,您会遇到没有行为的Java接口.换句话说,它们只是空接口定义.这些被称为标记接口.Java API中的标记接口的一些示例包括:

java.lang.Cloneable

java.io.Serializable

java.util.EventListener


注释现在将替换这些标记接口.
@Serializable会更有意义.或者至少如果注释在十年之前出现就会做到.

4> Nicolas C..:

在我工作的项目中,我们创建了一个名为PublicCloneable的接口,它包含clone方法并指定它是公共的.

我发现这个有用:事实上有一个克隆方法,但你无法访问它并没有多大帮助.

public interface PublicCloneable extends Cloneable {
    public Object clone();
}


“并指定它是公开的。” -实际上,默认情况下,接口中定义的方法是公共的。无需在代码中提及这一点。@尼古拉斯·C
推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有