我有一个奇怪的情况,我有一个实现接口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();
发布于 2018-10-13 03:44:38
部分改进可能是使TheClass
中的copy()
返回TheClass
,而接口中的方法仍然返回TheInterface
。这是允许的,因为返回类型不是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
https://stackoverflow.com/questions/52785904
复制相似问题