之间有什么区别List
,List<?>
,List<T>
,List<E>
,和List<Object>
?
1.清单
List
:是原始类型,因此不是typesafe
。仅在强制转换失败时才会生成运行时错误。当强制转换错误时,我们需要一个编译时错误。不建议使用。
2.列表<?>
List<?>
是一个无界通配符。但是我不确定它是干什么的?我可以打印一个List<?>
没有问题的文件:
public static void test(List<?> list){
System.out.println(list); // Works
}
为什么我不能向中添加项目List<?>
?
public static void test(List<?> list){
list.add(new Long(2)); // Error
list.add("2"); // Error
System.out.println(list);
}
3.列表<T>
public static void test(List<T> list){ // T cannot be resolved
System.out.println(list);
}
我不明白这种语法。我看到了这样的东西,它的工作原理是:
public <T> T[] toArray(T[] a){
return a;
}
有时候,我看<T>
,或者<E>
,或者<U>
,<T,E>
。它们都是相同的还是代表不同的东西?
4.列表<对象>
这将产生错误“该方法test(List<Object>)
不适用于参数List<String>
”:
public static void test(List<Object> list){
System.out.println(list);
}
如果尝试此操作,则会收到“无法从投射List<String>
到List<Object>
”的信息:
test((List<Object>) names);
我很困惑。String
是的子类Object
,那么为什么不是List<String>
的子类List<Object>
呢?
2
。我写了一些代码来证明这一点2
。tyvm