当前位置:   article > 正文

我丢,去面试初级Java开发岗位,被问到泛型?_什么级别会问泛型问题

什么级别会问泛型问题

1、泛型的基础概念

1.1 为什么需要泛型

        List list = new ArrayList();//默认类型是Object
        list.add("A123");
        list.add("B234");
        list.add("C345");
        System.out.println(list);

        for(int i=0;i<list.size();i++){
   
            //若要将list中的元素赋给String变量,需要进行类型转换,不然会报Incompatible types错误,显示list.get(i)返回的是Object
            String str =  (String) list.get(i);
            System.out.println(str);
        }
​   
        list.add(123);
        //因为类型是Object,我们可以把Integer类型或者其他数据类型的元素也加入list之中
        System.out.println(list.get(3));for(int i=0;i<list.size();i++){
   
            //String str =  (String) list.get(i);
            //但是在这里会报错java.lang.ClassCastException,我们不能直接将Integer类型的数据转换成String
            System.out.println(list.get(i).getClass());
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

如代码中所示,当我们定义了一个List,list默认的类型是所有对象的基类Object,那么我们取出数据的时候需要经过一次类型转换才能进行对象的实际类型的相关操作。因为List中的类型是Object,那么我们先添加了String类型的数据,然后再添加Integer或者其他类型的数据也是允许的,因为编译时List中是Object类型的数据,然而运行的时候却是它本身的类型,所以当我们将List中的数据当作String处理时会抛出java.lang.ClassCastException

那么有没有什么办法可以使集合能够记住集合内元素各类型,且能够达到只要编译时不出现问题,运行时就不会出现java.lang.ClassCastException异常呢?答案就是使用泛型。

1.2 什么是泛型

Java泛型设计原则是:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常。

泛型,即“参数化类型”,把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊类型,把<数据类型>当作是参数一样传递。

相关术语:

  • ArrayList中的E称为类型参数变量

  • ArrayList中的Integer称为实际类型参数

  • 整个称为ArrayList泛型类型

  • 整个ArrayList称为参数化的类型ParameterizedType

泛型的作用:

  • 代码更加简洁【不用强制转换】

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/523401
推荐阅读
相关标签
  

闽ICP备14008679号