我在 Java 中遇到了一个小问题。我有一个名为 Modifiable 的接口(interface)。实现此接口(interface)的对象是可修改的。

我还有一个 ModifyCommand 类(使用 Command 模式),它接收两个 Modifiable 对象(在列表中进一步交换它们 - 这不是我的问题,我已经设计了该解决方案)。

ModifyCommand 类首先创建可修改对象的克隆。从逻辑上讲,我让我的 Modifiable 接口(interface)扩展了 Cloneable。然后该接口(interface)定义了一个 clone() 方法,它的实现类必须重新定义该方法。

然后,在 ModifyCommand 中,我可以这样做:firstModifiableObject.clone()。我的逻辑是实现 Modifiable 的类必须从 Object 重新定义 clone 方法,因为它们将是 Cloneable(这就是我想要做的)。

问题是,当我定义类实现 Modifiable 并且我想覆盖 clone() 时,它不会让我声明 Object 类的 clone() 方法隐藏了 Modifiable 的方法。

我应该怎么办?我的印象是“我做错了”......

谢谢,

纪尧姆。

编辑:它认为我会忘记 clone() 的事情。我将 a) 假设传递给 Modifiable 对象(实现接口(interface))的对象已经被克隆,或者 b) 调用另一个方法,例如 copy(),它基本上可以对 Modifiable 对象进行深度复制(或者通用解决方案可能会起作用......)。

最佳答案

如果您使用的是 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 类的原始约定。由于 Modifiable 接口(interface)强加的额外约束,未正确优化 clone() 方法的代码将无法编译。作为奖励,调用代码不必强制转换 clone 方法的结果。

关于java - Java 中的强制可克隆接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/240774/

10-08 23:03