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

时间:2018-10-12 19:29:27

标签: java interface shallow-copy

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

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

谢谢

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();

1 个答案:

答案 0 :(得分:1)

部分改进可能是使copy()中的TheClass返回TheClass,而接口中的方法仍返回TheInterface。之所以允许这样做是因为返回类型不是Java方法签名的一部分。

这样,您可以做到

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

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

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