考虑以下代码:
class Test{
static <T> List<T> lstOf(T ...values){
List<T> lst = new ArrayList<T>(values.length);
for ( T val : values)
lst.add(val);
return lst;
}
static class Obj<T>{
T value;
public Obj(T val){
this.value = val;
}
}
public static void main(String [] args){
Obj<Integer> intVal = new Obj<Integer>(22);
Obj<Long> longVal = new Obj<Long>(22L);
List<Obj<? extends Number>> lst = lstOf(intVal, longVal);
}
}
编译器提示“lst”是类型
java.util.List<Test.Obj<? extends java.lang.Number&java.lang.Comparable<? extends java.lang.Number&java.lang.Comparable<?>>>>
lstOf 方法返回的列表对象的类型是什么?如何成功地将类型分配给返回值?
最佳答案
推断的类型为List<Test.Obj<? extends Number & Comparable<? extends Number & Comparable<?>>>>
如消息所示。这是因为 Java 选择了给定参数所共有的最具体的类型(两者的类型参数都是实现 Number
的 Comparable
)。为了使其仅使用您感兴趣的类型,Obj<? extends Number>
,称之为:
List<Obj<? extends Number>> lst = Test.<Obj<? extends Number>>lstOf(intVal, longVal);
关于java - 返回的列表是什么类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5504963/