代码中的问题是我们不能直接为类型clone
调用抽象方法Item
而我不想修改Item
类。有什么办法,或者我应该改变我的逻辑?
abstract class Item implements Cloneable {
private boolean stackable;
protected String name;
public Item()
{
this.name = new String( "Air" );
this.stackable = true;
}
public Item( String name )
{
this.name = name;
this.stackable = true;
}
public abstract Item clone();
}
class Tool extends Item {
protected double durability;
public Tool()
{
super("", false);
this.durability = 0;
}
public Tool(Tool src)
{
this.durability = src.durability;
}
public Item clone() throws CloneNotSupportedException {
Object obj = super.clone(); //problem is here
return (Item) obj;
}
}
答案 0 :(得分:1)
我以某种方式删除了您的错误
修改强>
[,1] [,2]
[1,] 1 2
[2,] 1 2
[3,] 1 2
答案 1 :(得分:0)
使用Cloneable
接口实现工具类并覆盖clone()
答案 2 :(得分:0)
p
答案 3 :(得分:0)
您可以使用反射来识别对象中是否存在克隆方法。 也许您也可以使用可克隆的界面标记您的类,以明确说明是否存在一种方法,因此您可以首先使用instanceof运算符cuz检查该方法,据我所知,反射与性能有关。
对我来说,它看起来像是Java的常规设计, 我还希望cloneable-interface应该包含对clonemethod本身的签名,但这不是我的三通。
希望这会有所帮助, 祝你有一天