一、概念
首先第一步说明泛型是什么,泛型的本质就是参数化类型,通俗一点就是说将我们的类型作为一个具体的参数来进行存储和取出。
举例来说:
List<Student> students = new ArrayList<>();
这个时候我们的Student类就是一个具体的参数类型;而这个ArrayList集合就是用来专门存取符合Student类的数据的
二、泛型的作用
简单说完什么是参数化类型之后,我们还要告诉对方泛型的作用。
泛型的作用其实就是用来进行类型安全检测和参数类型转换;类型安全检测:我们的泛型它是编译阶段生效的,什么是编译阶段,简单来说就是在你书写代码时,还没启动程序之前都叫编译阶段;这个时间段泛型会自动帮你进行参数类型判断。
比如下面例子:
List<Student> students = new ArrayList<>();
Student student = new Student();
students.add(student);//1
students.add(666);//2
students.add("Java");//3
在这三个添加中只有第一个正常显示,另外两个都会出现红色警告,因为此时我们已经用泛型来将这个集合提前定义好了数据类型,它会帮我们检查添加的数据类型是否符合要求;
参数类型转换:参数类型转换通过集合可以很明显的体现出来,我们ArrayList集合是通过Object数组实现的,在存入数据时,就会自动向上转型成Object类,我们也都清楚Object是所有类的父类;而后,在我们进行数据取出使用时,它会自动进行向下强转,即从Object类转为我们通过泛型定义好的类。其实所谓的参数类型转换无非就是自动进行向上转型和向下转型罢了。
三、总结
所以,我们的泛型主要是用来保证类型安全和消除向上转型和向下转型的繁琐操作的;当在学习到后面的反射知识时,还会出现泛型擦除的情况,这是通过反射获取到对象后才会得知到的情况。