我有一种奇怪的情况,我有一个实现接口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();
答案 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