首先看一个关于集合的例子:
List list = new ArrayList();
list.add("XiaoWang");
list.add(new Date());
list.add(new Integer());
这里面创建了一个List的集合对象,然后向里面插入三个元素,分别为String类型、Integer类型和Date类型,编译程序,虽然会提示下面的类型安全的警告:
注意:List1.java 使用了未经检查或不安全的操作。
注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。
但是,毕竟只是一个警告可以不必理会。现在想获取集合中的元素,并且对集合中的元素进行操作:
String s = (String) list.get(0);
Date d = (Date) list.get(1);
Integer o = (Integer) list.get(2);
程序写到这里我实在是写不下去了,现在只有三个元素,就要一个一个利用get()方法将元素获取出来,并利用强制类型转换成插入时的类型,(1)如果集合中有成百上千条元素而这种方法又没有办法用循环来读出来,(2)而且这种设法而且每次获取时,都要知道插入的类型,现在加入插入这个list集合的程序,和获取这个集合中的元素的程序不再同一个包中,或者干脆就不再一个项目当中,这样以来获取集合中的元素就相当的麻烦。
总结以上,直接用集合来插入或者获取元素时,有两个缺点:1.是不适合向集合中获取大量元素的情况;2.获取元素太麻烦。有时候,真的,上述两个缺点很让人崩溃。那么产生这种问题的原因是,在向集合中插入对象的时候,就根本不应该允许各种类型的元素插入,只能应该有一种类型被插入到集合当中,那么谁来承担这样的类型检查。所以,这就需要范型来承担这样的类型检查,所以,在集合中引入范型变得急不可待了。
一、在集合中使用范型,可以帮助程序在编译的时候对所有的插入集合中的元素进行检查,查找出与指定类型参数不匹配的元素
在集合中使用范型的格式为:Collection<T1> list = new Collection<T1>()
其中Collection为任意一种集合类型,T1为任意种指定的类型参数,这里为什么用T1而不用T,是因为这里面T1是明确特指的一种类型,而非T通常指代的通用类型。例如:
创建一个新的集合的对象:
List<Date> list = new ArrayList<Date>();
那么,这里面的TI就是Date,这里面是TI被特别指明为Date.
这是时候如果在向里面插入元素的话,就只能插入Date类型,如果再次向list中插入String类型,或者Integer类型,在程序编译的时候就会报错,不会把错误放到运行时来处理。