我在 Java 中遇到了一个小问题。我有一个名为“可修改”的界面。实现此接口的对象是可修改的。
我还有一个 ModifyCommand 类(具有命令模式),它接收两个可修改对象(以进一步在列表中交换它们 - 这不是我的问题,我已经设计了该解决方案)。
ModifyCommand 类首先创建可修改对象的克隆。从逻辑上讲,我使可修改的接口扩展为可克隆的。然后,该接口定义了一个clone()方法,其实现类必须重新定义该方法。
然后,在ModifyCommand中,我可以执行以下操作:firstModifyingObject.clone()。我的逻辑是,实现可修改的类必须重新定义对象的克隆方法,因为它们将是可克隆的(这就是我想要做的)。
问题是,当我定义类实现 Modulated 并且我想重写clone() 时,它不会让我这样做,并指出 Object 类中的clone() 方法隐藏了可修改的方法。
我应该怎么办?我的印象是“我做错了”......
Thanks,
纪尧姆.
编辑:我想我会忘记clone()的事情。我将要么 a) 假设传递给可修改对象(实现接口)的对象已经被克隆,要么 b) 调用另一个方法,例如 copy(),这基本上会执行可修改对象的深层复制(或者通用解决方案可能会起作用......)。
如果您使用的是 java 1.5 或更高版本,您可以通过以下方式获得所需的行为并删除强制转换:
public interface Modifiable<T extends Modifiable<T>> extends Cloneable {
T clone();
}
public class Foo implements Modifiable<Foo> {
public Foo clone() { //this is required
return null; //todo: real work
}
}
由于 Foo 扩展了 Object,因此这仍然满足 Object 类的原始契约。由于 Modificable 接口施加的额外约束,未正确细化 clone() 方法的代码将无法编译。额外的好处是,调用代码不必强制转换克隆方法的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)