我有一类名为item的对象,但克隆功能不起作用。
Item newItem = addedItem.clone();
请帮助:'(
加入:
public abstract class Item extends GameObjectsCls implements Cloneable
Item newItem = (Item)addedItem.clone();
并添加了公共克隆方法,但现在要求try catch语句。这可以吗?公开Object clone() throws CloneNotSupportedException {
答案 0 :(得分:2)
首先,您的Item
类需要实现Cloneable
接口,否则clone()
会抛出异常。这在documentation for Object#clone()
。
其次,您的班级需要实施clone()
的公开版本,因为clone()
的{{1}}方法是Object
。
最后,您可能需要将结果投射到protected
以使作业有效,具体取决于您在班级Item
中声明clone()
的方式。
编辑(基于OP的编辑):您的Item
方法应如下所示:
clone()
没有必要声明它会抛出public class Item implements Cloneable {
...
public Item clone() {
return (Item) super.clone();
}
}
,因为它赢了。
但是,我建议您完全停止使用CloneNotSupportedException
并简单地实现复制构造函数:
clone()
然后你可以创建你的"克隆"像这样:
public class Item {
public Item(Item other) {
// copy over relevant fields
}
// ... other constructors
}