gpt4 book ai didi

java - 为什么克隆不起作用?

转载 作者:行者123 更新时间:2023-11-29 07:01:58 26 4
gpt4 key购买 nike

线程“main”中的异常 java.lang.RuntimeException:无法编译的源代码未报告的异常 java.lang.CloneNotSupportedException;必须被捕获或宣布被抛出在 Test.main(Test.java:13)Java 结果:1

 public class  Color
{
public String ColorName()
{
return "Red";
}
}
public class Test extends Color
{
public static void main(String args[])
{
Color MyShirt = new Color();
Color MyBag = (Color) MyShirt.clone();

System.out.println(MyShirt.ColorName());
System.out.println(MyBag.ColorName());
}
}

最佳答案

其他答案是正确的,指出您的类需要实现 Clonable 并覆盖 clone() 方法才能按预期工作:

class Color implements Cloneable{
@Override
public Color clone(){
Color c = new Color();
c.name = this.name;
return c;
}
// other methods
}

但是,clone() 最重要的是您应该始终避免使用它。

Joshua Bloch在他的书中解释 "Effective Java" , clone() 严重损坏,正确地建议改用复制构造函数。您可以阅读更多相关信息 here .

不使用clone(),您应该像这样声明一个复制构造函数:

class Color{
public Color(){ /* ... */ } // default constructor
public Color(Color c){
this.name = c.name; // copy all attributes
}
// other methods
}

然后用它来复制对象:

Color c = new Color();
Color other = new Color(c); // returns a copy of c

关于java - 为什么克隆不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24514268/

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