泛型概述

集合容器类在 设计阶段/声明阶段 不能确定这个容器到底实际存的是什么类型的对象,所以在JDK1.5之前只能把元素类型设计为Object,JDK1.5之后使用泛型来解决。因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型。

泛型的概念

所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如, 继承或实现这个接口,用这个类型声明变量、创建对象时)确定(即传入实际的类型参数,也称为类型实参)。

泛型的好处

可以限定类型,解决元素存储的安全性问题。如ArrayList,若不适用泛型,则可以添加任意类型的元素。

// 未使用泛型前
ArrayList arrayList = new ArrayList();
arrayList.add(13);
arrayList.add("hello");

// 适用泛型后
ArrayList<Integer> integers = new ArrayList<Integer>();
integers.add(32);
integers.add(321);

不需要进行强制转换

// 未使用泛型需要强制转换
ArrayList list1 = new ArrayList();
list1.add(32);
list1.add(312);
list1.add(2);
list1.add(23);

for (Object o:list1) {
    int i = (Integer) o;
    System.out.println(i);
}
// 使用泛型后不需要转换
ArrayList<Integer> integers = new ArrayList<>();
integers.add(2);
integers.add(21);
integers.add(11);
integers.add(15);

for (int i : integers) {
    System.out.println(i);
}

Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生 ClassCastException异常。同时,代码更加简洁、健壮。