在有的时候,泛型不能起到安全保护的作用,比如:
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)
这样在放入不同类型的时候,直接提示异常