java从泛型方法调用重载方法
如何创建一个可以调用重载方法的泛型方法? 我试过了,但它给出了一个编译错误
测试。java:19:不兼容类型 发现:java。lang.对象 必填项: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);
}
}
}
}
# 1 楼答案
T
变量只能设置为类T
的对象或其子类之一。在您的例子中,getCloneOf()
返回一个Object
,它不是T
的子类,甚至不一定是T
的子类例如:
这没关系:
因为即使p是子类对象,这也会起作用,因为它从父类继承了该函数:
这不好:
因为这在理论上是可行的,因为变量的类型是Child,但是如果允许上一行,那么这会因为父对象没有具有该名称的函数而崩溃