泛型的背景
Java推出泛型以前,程序员可以构建一个元素类型为Object的集合,该集合能够存储任意的数据类型对象,而在使用该集合时,需要明确知道存储每个元素的数据类型,否则很容易引发ClassCastException异常
public class Demo1 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add('a');
list.add(100);
list.add("123");
list.add(true);
}
}
编译成功运行异常,此时我们发现编译器并不会在编译的阶段提示我们代码的错误,我们很难发现,此时泛型的出现解决了这个问题。
如上图我们只能插入对应String类型的数据,避免出现ClassCastException异常,而且当我们取出集合中的元素时也不需要数据转换。
ArrayList<String> stringArrayList = new ArrayList<>();
stringArrayList.add("a");
stringArrayList.add("b");
stringArrayList.add("c");
for (int i = 0; i < stringArrayList.size(); i++) {
String s = stringArrayList.get(i);
System.out.println(s);
}
以上可知泛型有两个优点:
- 编译期间检查数据类型
- 消除了强制类型的转换