泛型
泛型,本质意义为参数化类型,看起来比较抽象,更细致的解释为将所操作的数据类型作为参数的一种语法。
public class Test<T>{
T Test(){}
}
在这里中括号里面的T就是作为一个参数在Test被实例化的时候所传递过来的参数。
Test<Integer> TestInteger = new Test<>();
这的T就被实例化为Integer。
作用
看一下这个例子:
import java.util.ArrayList;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
List list = new ArrayList();
list.add("xiaohuangji");
list.add("kayou");
list.add(10000);
for (int i = 0; i < list.size(); i++) {
String name = (String)list.get(i);
System.out.println("name:"+name);
}
}
}
这里定义了一个List集合,向里面添加了三个值,前俩个值为String类型的值,最后添加的为Integer类型的值,这是完全被允许的,因为这个时候list集合的默认类型为Object类型。但是在随后的循环输出的时候,将list中的值取出来类型强制转换时会报出ClassCastException的异常。这类错误只有在编译运行的时候才会发现,在编码的过程中不易发现。
经过上面的编码过程中,主要存在俩个问题:
- 将一个对象放入集合里面,集合不会记住这个对象的类型,当再次从集合中取出此对象时,这个对象变成了Object类型,但他运行的时候的类型仍旧时其本身的类型。
- 去除元素的时候需要进行强制类型转换到具体的目标类型,而且很容易出现ClassCastException的异常。
泛型的作用:
-
泛型的设计主旨在于让程序员写出更加通用化且灵活的代码。
-
泛型将代码安全性检查提前到了编译器。
-
泛型可以省去类型强制转换。
—————————分割线————————————————————————————————
以上内容都是目前所理解的,非最终版本,会根据工作和学习的深入慢慢加深理解,更新在上面(2020.5.22版)。