第二十六条:不要使用原始类型

从这一章开始讲解关于泛型以及将泛型的好处最大化并将其负面影响最小化。

每日一问:为啥不要使用原始类型???

比如以下代码,往原始类型LIst里放几个不同类型的对象:

public class HelloWorld2 {
    public void test1() {
    }

    public static void test2() {
    }

    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("沉默的羔羊");
        list.add(18);
        list.add(new HelloWorld2());
        System.out.println(list);
    }

}

结果:

[沉默的羔羊, 18, com.example.alibaba.test.HelloWorld2@7a4f0f29]

Process finished with exit code 0

有人会说,这样不是挺好的么,想放什么就放什么。那么问题来了?我取数据应该怎么取?

    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("沉默的羔羊");
        list.add(18);
        list.add(new HelloWorld2());
        System.out.println(list);

        // 取数
        for (Object o : list ) {
            String s = (String) o;
            System.out.println(s);
        }
    }

}

结果:

[沉默的羔羊, 18, com.example.alibaba.test.HelloWorld2@7a4f0f29]
沉默的羔羊
Exception in thread "main" java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String (java.lang.Integer and java.lang.String are in module java.base of loader 'bootstrap')
	at com.example.alibaba.test.HelloWorld2.main(HelloWorld2.java:22)

Process finished with exit code 1

以String类型取数据,取到其他类型时出现了异常,要想全部取出数据:

        // 取数
        for (Object o : list) {
            if (o instanceof String) {
                String s = (String) o;
                System.out.println(s);
            } else if (o instanceof Integer) {
                Integer i = (Integer) o;
                System.out.println(i);
            } else if (o instanceof HelloWorld2) {
                HelloWorld2 helloWorld2 = (HelloWorld2) o;
                System.out.println(helloWorld2);
            }
        }

结果:

沉默的羔羊
18
com.example.alibaba.test.HelloWorld2@7a4f0f29

Process finished with exit code 0

这样的代码是不是可读性、可维护性实在是太差了!

使用原始类型是合法的,但这么做,就会失去泛型在安全性和表现力等方面的所有优势

注:本文没有使用原书中案例是因为书中案例不太简单易懂。

所有文章无条件开放,顺手点个赞不为过吧!

 

                                          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值