在有的時候,泛型不能起到安全保護的作用,比如:
private static void add(List list){
list.add(123);
}
public static void main(String[] args) {
List<String> l = new ArrayList<>();
add(l);
System.out.println(l);
}
[123]
雖然設定了泛型,但是在執行的時候,由於擦除的作用,再list 內部,其實並不知道這裏必須是一個String,擦除到object,所以123也可以放進去,這樣就造成了不安全的因素
解決辦法:
private static void add(List list){
list.add(123);
}
public static void main(String[] args) {
List<String> l = Collections.checkedList(new ArrayList<>(),String.class);
add(l);
System.out.println(l);
}
Exception in thread "main" java.lang.ClassCastException: Attempt to insert class java.lang.Integer element into collection with element type class java.lang.String
at java.util.Collections$CheckedCollection.typeCheck(Collections.java:3037)
at java.util.Collections$CheckedCollection.add(Collections.java:3080)
at com.yaoqiang.demo.Demo.add(Demo.java:19)
at com.yaoqiang.demo.Demo.main(Demo.java:24)
這樣在放入不同類型的時候,直接提示異常