如何创建可以调用重载方法的泛型方法? 我试过但它给出了编译错误。
Test.java:19:不兼容的类型 发现:java.lang.Object 要求:T T newt = getCloneOf(t); ^
import java.util.*;
public class Test {
private Object getCloneOf(Object s) {
return new Object();
}
private String getCloneOf(String s) {
return new String(s);
}
private <T> Set<T> getCloneOf(Set<T> set){
Set<T> newSet = null;
if( null != set) {
newSet = new HashSet<T>();
for (T t : set) {
T newt = getCloneOf(t);
newSet.add(newt);
}
}
}
}
答案 0 :(得分:3)
T
变量只能设置为等于类T
的对象,或其中一个子类。在您的情况下,getCloneOf()
返回的是Object
,它不会是T
的子类,甚至不是T
的子类。
例如:
class Parent {
public void doStuff(){
}
}
class Child extends Parent {
public void doDifferentStuff(){
}
}
这没关系:
Parent p = new Child();
因为即使p是Child类对象,这也会起作用,因为它从Parent继承了该函数:
p.doStuff();
这不行:
Child c = new Parent();
因为这在理论上应该起作用,因为变量是Child类型,但是允许前一行会爆炸,因为Parent对象没有具有该名称的函数。
c.doDifferentStuff();