实现 class 实现接口的复制方法 - Java

Implementing a copy method of a class implementing an interface - Java

我遇到了这种奇怪的情况,我有一个 class TheClass 实现接口 TheInterface 并且 class TheClass 应该有一个 return 类型 TheInterface 的 copy() 方法,并且它应该对自己进行浅表复制。尝试调用我的函数 copy() 并使用它时,出现不兼容类型错误。我需要保持 copy() 方法的 return 类型不变。

有什么方法可以做到这一点吗?

谢谢

class TheClass implements TheInterface,Cloneable {


private Set<Integer> set;

public TheClass(){
    set=new HashSet<Integer>();
}

public TheInterface copy() {
    TheInterface clone = this.clone();
    return clone;
}

protected A clone(){
    A clone;
    try
    {
        clone = (A) super.clone();
    }
    catch (CloneNotSupportedException e)
    {
        throw new Error();
    }
    return clone;
}

这里我得到了不兼容的类型错误

public class Main  {
public static void main(String[] args) {
    TheClass class1 = new TheClass();
    TheClass class2 = class1.copy();

部分改进可能是copy() in TheClass return TheClass,而接口中的方法仍然是returnTheInterface.这是允许的,因为 return 类型不是 Java 方法签名的一部分。

这样就可以了

TheClass class1 = new TheClass();
TheClass class2 = class1.copy();

但是,如果您在(静态)类型 TheInterface 的变量上调用 copy(),您仍然必须将其分配给 TheInterface(但这似乎合乎逻辑):

TheInterface class1 = new TheClass();
TheInterface class2 = class1.copy(); // cannot be TheClass in this case