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)
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |