15.13 泛型動態類型安全

在有的時候,泛型不能起到安全保護的作用,比如:

    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)

這樣在放入不同類型的時候,直接提示異常


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章