实现 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
我遇到了这种奇怪的情况,我有一个 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