使用
public class SuperType {
}和
public class TestClass<T extends SuperType > {
public void doSomething() {
List<T> list = new ArrayList<T>();
list.add(new SuperType ()); // ERROR
}
}它不会编译,给我
类型列表中的方法add(T)不适用于参数(SuperType)
但是为什么呢?
发布于 2013-07-31 10:27:00
假设你有
public class SuperType {
}
public class SubType extends SuperType {
}使用TestClass<SubType>,您的代码变成
public class TestClass<SubType> {
public void doSomething() {
List<SubType> list = new ArrayList<SubType>();
list.add(new SuperType ());
}
}这必须出错,因为new SuperType()不够具体。它必须至少是一个SubType。
发布于 2013-07-31 10:11:57
该类型仅用于SuperType的子类,而不是SuperType本身。相反,使用
List<SuperType> list = new ArrayList<SuperType>();
list.add(new SuperType ()); 发布于 2013-07-31 10:14:45
你应该弄点东西来-
不能通过方法调用转换将SuperType转换为T
意味着在实现中使用类型声明无效。
当你说-
T extends SuperType实际上,您是说参数可以是SuperType或SuperType的任何子类型。
应该是-
List<SuperType> list = new ArrayList<SuperType>();https://stackoverflow.com/questions/17967521
复制相似问题