gpt4 book ai didi

java - 在未实现的 Cloneable 类的对象上调用clone() 方法不会抛出 RuntimeException

转载 作者:行者123 更新时间:2023-12-02 00:26:43 26 4
gpt4 key购买 nike

测试用例(jdk版本:oracle 1.6.0_31)

public class TestCloneable{
public TestCloneable clone(){
return new TestCloneable();
}
}


public static void main(String[] args) {
TestCloneable testObj = new TestCloneable();
TestCloneable testObj2 = new TestCloneable();

System.out.println(testObj.clone());

Hashtable<Integer, TestCloneable> ht = new Hashtable<Integer, TestCloneable>();
ht.put(1, testObj);
ht.put(2, testObj2);
System.out.println(ht.clone());

HashMap<Integer, TestCloneable> hm = new HashMap<Integer, TestCloneable>();
hm.put(1, testObj);
hm.put(2, testObj2);
System.out.println(hm.clone());

}

这些行都不会在运行时给出 CloneNotSupportedException,这与克隆方法的 java 规范相矛盾:

   /**
* @exception CloneNotSupportedException if the object's class does not
* support the <code>Cloneable</code> interface. Subclasses ...
*/

哪里出错了?

最佳答案

根据javadocs for hashmap :

clone()
Returns a shallow copy of this HashMap instance: the keys and values themselves are not cloned.

因此,您的类永远不会调用 clone() 方法。

此外,如果您想受益于 Object 中的 clone() 方法的行为,并且在对象未实现 时抛出异常Cloneable,您应该在类的重写方法 clone 中调用 super.clone()

关于java - 在未实现的 Cloneable 类的对象上调用clone() 方法不会抛出 RuntimeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9892732/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com