之间有什么区别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