第26 条: 请不要使用原生态类型

泛型请不要使用原生态类型

泛型是java1.5引进来的,什么是泛型我就不多说了。
什么是原生态类型:
这是原生态的,没有<>

List list = new ArrayList<>();

这是非原生态的,即有<>

List<String> list = new ArrayList<>();

泛型的作用有两点
1.编译时检查我们所放入的对象是否是泛型中的类型
2.取出时自动编译成泛型的类型

    public static void main(String[] args) {
        //在这里我们用的泛型是String
        List<String> list = new ArrayList<>();
        //当在集合中添加不是String类型的对象时就会编译不通过
        list.add("a");
        //取出来的对像直接就是String类型
        String s = list.get(0);

        //在这里我们用的原生态
        List list1 = new ArrayList<>();
        //可以随便放入对象
        list1.add("a");
        //我们放进去的是String,取出来的是Object
        Object o = list1.get(0);
        //要想得到我们放进去的String类型,还得进行转换
        String s1 = String.valueOf(o);
    }

原生态类型跳过了编译检查,是不安全的.

    public static void main(String[] args) {
        //在这里我们用的泛型是String
        List<String> list = new ArrayList<>();
        //这里参数要求是List<Object>,其实参数是List<String>类型不一致,报编译错误
        main1(list,"a");
        //这里参数要求是List原生态类型,List<String>是他的子类型,编译可以通过。
        main2(list,"a");
        String s = list.get(0);

    }
    //如果表示泛型是任意类型可以选择List<Object>,也会进行安全检查
    public static void main1(List<Object> list,Object a) {
        list.add(a);
    }
    //原生态类型跳过了参数检查
    public static void main2(List list,Object a) {
        list.add(a);
    }

当我们在一个方法的参数里面不确定泛型的类型时,可以用通配符?来代替

    public static void main3(List<?> list) {
        Object o = list.get(0);
    }

毫无疑问,他也是有安全检查的。
使用原生态的例外情况
1.表示class类的时候必须使用原生态 List.class
2.instance of的使用下 if(o instance List) 这里用泛型就显的多余了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值