列表与列表<对象>?

use*_*039 3 java collections

请解释一下List- raw type和List<Object>.之间的区别.

以下代码给出了运行时错误:

public static void main(String[] args) {
    List<String> strings = new ArrayList<String>();
    unsafeAdd(strings, new Integer(42));
    String s = strings.get(0); // Compiler-generated cast
}
private static void unsafeAdd(List list, Object o) {
    list.add(o);
}
Run Code Online (Sandbox Code Playgroud)

这给出了编译时错误:

public static void main(String[] args) {
    List<String> strings = new ArrayList<String>();
    unsafeAdd(strings, new Integer(42));
    String s = strings.get(0); // Compiler-generated cast
}
private static void unsafeAdd(List<Object> list, Object o) {
    list.add(o);
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 7

在第二种情况下,您正在做一些编译器可以锻炼的东西并不安全.在第一种情况下,您使用的是原始类型,因此编译器不会执行相同的检查.