猿问

为什么在java.lang.Object中保护clone()方法?

为什么在java.lang.Object中保护clone()方法?

clone()定义为受保护的具体原因是java.lang.Object什么?



慕少森
浏览 1386回答 3
3回答

慕妹3242003

克隆被保护的事实是非常可疑的 - 因为该clone方法未在Cloneable接口中声明。这使得该方法对于获取数据副本毫无用处,因为您无法说:if(a instanceof Cloneable) {     copy = ((Cloneable) a).clone();}我认为,设计Cloneable是现在很大程度上被视为一个错误(以下引文)。我通常希望能够实现接口Cloneable但不一定要创建接口Cloneable(类似于使用Serializable)。没有反思就无法做到这一点:ISomething i = ...if (i instanceof Cloneable) {    //DAMN! I Need to know about ISomethingImpl! Unless...    copy = (ISomething) i.getClass().getMethod("clone").invoke(i);}来自Josh Bloch的Effective Java的引用:“Cloneable接口旨在作为一个mixin接口,用于对象宣传它们允许克隆。不幸的是它无法达到此目的......这是一种非常非典型的接口使用,而不是一个被模拟的接口...为了实现接口对类产生任何影响,它和它的所有超类必须服从一个相当复杂,不可执行且基本上没有文档的协议 “

江户川乱折腾

clone是受保护的,因为它应该被覆盖,以便它特定于当前类。虽然可以创建一个clone克隆任何对象的公共方法,但这不如专门针对需要它的类编写的方法那么好。
随时随地看视频慕课网APP

相关分类

Java
我要回答