什么是泛型?

    高能预警!!! 以下内容为一个学习java两个月的菜菜菜菜鸡的一点点见解,请谨慎阅读!!

    今天一个朋友突然问我泛型是什么,顿时一脸蒙蔽,我大概是知道一点泛型该怎么用,还真不知道如何去阐述,构思了半个小时,算是构建出一套自己的说法。

    正文开始:

    理解泛型还要回到字面意思上,泛型(generic),意味着有很多很多....

    举个栗子:

    泛型有泛型类,泛型方法,泛型接口,举最常见的泛型类ArrayList<E>,不对,ta并不是一个类,而是很多很多个类,你需要告诉jdk你需要哪有一个ArrayList<E>,然后jdk会帮你量身定制你想要的ArrayList<E>,比如说ArrayList<String>, jdk就会为你创建一个独特的类,这个类的set(),add(),get()方法的参数类型或者返回值类型是你通过参数<String>规定好的,而如果你不加参数,这个参数就默认为<Object>。

  •                
  •    

        (以上三个方法的形参或返回值会根据你输入ArrayList的参数类型<E>而变化)

     也可以说,规定了参数类型的ArrayList<E>类,其实都是没有规定参数类型的ArrayList<>类(也就是ArrayList<Object>)的子类,ArrayList<Object>有很多很多子类,你可以创建自己想要的子类。(但其实他们之间并不存在子父类的说法,这样说只是一种偷鸡的理解方式。)

        同理,类似的泛型方法和泛型接口也可以理解为,这里有很多很多方法/接口,jdk为你定制了一个你想要的方法/接口。

        优点

一个被举了无数次然后又被我举了一次的栗子

        List arrayList = new ArrayList();
        arrayList.add("aaaa");
        arrayList.add(100);

        for(int i = 0; i< arrayList.size();i++){
            String item = (String)arrayList.get(i);
            System.out.println(item);
        }
        毫无疑问会出现类型转换异常
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

        运行时异常,编译时不会给你报错,只有在运行时才会出现的异常,而泛型却可以将运行时异常转换成编译阶段的错误,将问题提前解决,避免许多不必要的问题发生。(所以说java使用者在java设计者眼中就是个傻瓜,因为设计者时刻在担心我们犯错)

       哇,第一次写文章,有点小激动,大佬们赏个脸呗 (=^ ^=)



猜你喜欢

转载自blog.csdn.net/qq_40134710/article/details/80211157