一、什么是泛型?
泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,
就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
/* 定义了一个List类型的集合,先向其中加入了两个int类型,随后加入一个String类型的值。 这是完全允许的,因为此时list默认的类型为Object类型,所以在编译阶段正常。在之后的循环中, 由于忘记了之前在list中也加入了String类型的值或其他编码原因,所以运行时会出现“java.lang.ClassCastException”异常。 因此,导致此类错误编码过程中不易发现。 */ public static void main(String[] args) { List list=new ArrayList(); list.add(100); list.add(200); list.add("ABC"); for(int i=0;i<list.size();i++){ Integer math=(Integer) list.get(i);//java.lang.ClassCastException System.out.println(math); } }
/* * 通过List<Integer>,直接限定了list集合中只能含有Integer类型的元素, * 由于编译器已经能够确认它是Integer类型了。所以在往集合找中添加String * 元素时会提示编译错误 */ public static void main(String[] args) { List<Integer> list=new ArrayList<Integer>(); list.add(100); list.add(200); list.add("adsa")//提示编译错误 for(int i=0;i<list.size();i++){ Integer math=(Integer) list.get(i); System.out.println(math); } }