集合比通用类型的标准列表更安全?

Kal*_*iwy 8 java generics java-6

我在Java中使用泛型,但它并不像我想的那么好

public static void add(List l, Object o) {
    l.add(o);
}

public static void main(String[] args) throws Exception {
    List<Integer> list = new ArrayList<Integer>();
    add(list, "1.23");
    add(list, 1.23);
    System.out.println(list);
}
Run Code Online (Sandbox Code Playgroud)

所有这些编译和工作.当我从list异常中获取值时抛出.

它能在Java 6中更安全吗?

eme*_*esx 14

我建议使用标准Collections:

List<Integer> checked = Collections.checkedList(list, Integer.class);
Run Code Online (Sandbox Code Playgroud)

然后继续努力checked.ClassCastException在插入任何不兼容的实例期间将抛出A - 比之前更快(因此更好)(即在检索期间).

NB检查你的编译器消息,我敢打赌你在提到不安全/未经检查的代码时会打印一些警告..你的问题正是编译器试图告诉你的.如果您控制签名add,使其成为通用 - 它将为您提供编译时的安全性.

public static <T> void add(List<T> list, T t) {
    list.add(t);
}
Run Code Online (Sandbox Code Playgroud)