List、List<?>、List<T>、List<E> 和 List<Object>1. 列表2. 列表<?>3. 列表<T>4. 列表<对象>
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
}
为什么我无法将项目添加到列表<>
?
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>
的子类呢?