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)

这样在放入不同类型的时候,直接提示异常


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值