设计泛型的原因:让集合记住其元素的数据类型,而不是统一当做Object类型处理,无需强制类型转换。
一、编译时不检查类型导致的异常
import java.util.*;
public class ListError
{
public static void main(String[] args)
{
//创建一个计划只想要保存字符串的List集合对象
var strList = new ArrayList();
strList.add("旺财");
strList.add("咪咪");
strList.add(5);//不小心在集合中加入了一个Integer对象
strList.forEach(str->System.out.println(((String) str).length()));
}
}
会出错,引发ClassCastException异常,因为试图将Integer对象转换为String类型。
若不加add(5),则:
二、使用Java参数化类型——泛型
允许程序在创建集合时指定集合元素的类型。
eg:List,这表明:该List只能保存字符串类型的对象。
改写前面的程序: