Java 返回的列表的类型是什么?

Java 返回的列表的类型是什么?,java,generics,Java,Generics,考虑以下代码: 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>{

考虑以下代码:

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);
    }
}
类测试{
静态列表(T…值){
List lst=新的ArrayList(values.length);
for(T val:值)
第一次添加(val);
返回lst;
}
静态类Obj{
T值;
公共Obj(T val){
this.value=val;
}
}
公共静态void main(字符串[]args){
Obj intVal=新Obj(22);
Obj longVal=新Obj(22L);
列表>>>

lstOf方法返回的列表对象的类型是什么?如何成功地将类型分配给返回值?

它是传递给该方法的参数类型


如果调用
lstOf(String…strs)
则结果为
List
推断类型为
Listcolin有详细答案,但我建议改为指定
lst

List<? extends Obj<? extends Number>> lst = lstOf(intVal, longVal);

listLimition:在这个解决方案中,除了
null
之外,不能在
lst
中附加任何内容。是的,就像@meriton所说的,这会对列表施加额外的限制,而这些限制是不必要的。谢谢。您的解决方案对我也有效(因为我不需要修改lstOf()方法返回的列表)谢谢!这很有效。但是使用-Xlint编译时仍然会警告我未经检查的泛型数组创建--我想这与varargs lstOf方法有关。@Ajay:是的,泛型类型和varargs不能很好地结合在一起。在Java 7中,您可以在声明
lstOf
时抑制该警告,这样调用方就不会得到它。酷。fingers为JDK 7交叉
List<Obj<? extends Number>> lst = Test.<Obj<? extends Number>>lstOf(intVal, longVal);
List<? extends Obj<? extends Number>> lst = lstOf(intVal, longVal);