在Java中克隆接口

3

I have a problem in Java:

I have an interface:

public interface I extends Cloneable {

}

以及一个抽象类:

public abstract class AbstractClass {

    private I i;

    public I i() {
        return (I)(i).clone();
    }
}

但是使用clone()会产生以下错误:

方法clone()对于类型I未定义

有没有人有办法解决这个问题?我唯一找到的方法是在I中添加一个新方法:(I newI()),用于克隆I。是否有更简洁的解决方案?

谢谢。

2个回答

7

您需要重写clone()方法,使其为public

public interface MyI extends Cloneable {
    public MyI clone();
}

有点奇怪的是,Cloneable接口并没有包含clone()方法,而clone()方法在Object类中却是protected的!这个话题之前在stackoverflow上已经讨论过了


据我所理解,没有比在我的接口中重新定义clone()(或者我称之为newI)更干净的解决方案,因为接口不继承自Object。 - Eyal
是的 - 我的经验是很多人避免使用 clone(),因为它非常不标准。 - oxbow_lakes

2

如果您更改了以下内容,会发生什么情况:

return (I)(i).clone();

to

return ((I)i).clone();

?


i 是 I 类型。外部强制转换是必需的,因为 clone 返回一个 Object 类型。 - Eyal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接