集合可以存储任何类型的对象,但是当把一个对象存入集合后,集合会“忘记”这个对象的类型,将该对象从集合中取出时,这个对象的编译类型就变成了Object类型。换句话说,在程序中无法确定一个集合中的元素到底是什么类型的。那么在取出元素时,如果进行强制类型转换就很容易出错。
package test;
import java.util.ArrayList;
public class test1 {
public static void main(String[] args) {
ArrayList list=new ArrayList();
list.add("string");
list.add("collection");
list.add(1);
for(Object obj:list){
String str=(String) obj;
System.out.println(str);
}
}
}
泛型可以限定方法操作的数据类型,在定义集合类时,使用“<参数化类型>”的方式指定该类中方法操作的数据类型,具体格式如下:
ArrayList<参数化类型> list = new ArrayList<参数化类型>();
接下来,对上文中的代码进行修改,如下所示:
ArrayList< String > list = ArrayList< String >();//创建集合对象并指定泛型为String
上面这种写法就限定了ArrayList集合只能存储String类型元素,将改写后的程序在中编译时就会出现错误提示,如下图所示。
package test;
import java.util.*;
public class test2 {
public static void main(String[] args) {
ArrayList<String> list=new ArrayList();
list.add("string");
list.add("collection");
list.add(1);
for(String str:list){
System.out.println(str);
System.out.println(str);
}
}
}