一、 泛型优点:安全机制,强制转换。
实例:
ArrayList al=new ArrayList();//定义集合
al.add("papapap01");
al.add("papap02");
al.add("ppap03");
al.add("pap01");
Interator it=al.iterator();//迭代器,遍历元素
while(it.hasNext())
{
String s=(String)it.next();//强转为String型
System.out.println(S+":"+s.length());
}
s输出:papapap01:9
papap02:7
ppap03:6
pap01:5
ArrayList al=new ArrayList();//定义集合
al.add("papapap01");
al.add("papap02");
al.add("ppap03");
al.add(3);//添加一个Integer类的对象,实际上根据插箱装箱为al.add(new Integer(3))
Interator it=al.iterator();//迭代器,遍历元素
while(it.hasNext())
{
String s=(String)it.next();//强转为String型
System.out.println(S+":"+s.length());
}
编译时没有错误,运行时出现classcastException异常。不可能让用户解决这样的问题。于是,在java1.5中引入了泛型,是一个安全机制。
由于,定义容器(集合)时,没有明确类型,打来了非常严重的后果,泛型的出现就是为了给集合元素定义一个类型。就像数组一样,定义的时候就指定了数组类型 int【】 aar=new int【10】;
ArrayList al<String>=new ArrayList<String>();//定义集合,同时限定了类型
al.add("papapap01");
al.add("papap02");
al.add("ppap03");
al.add(3);//添加一个Integer类的对象,实际上根据插箱装箱为al.add(new Integer(3))
Interator it=al.iterator();//迭代器,遍历元素
while(it.hasNext())
{
String s=(String)it.next();//强转为String型
System.out.println(S+":"+s.length());
}
由于加入了泛型,直接在编译时就报错。
ArrayList al<String>=new ArrayList<String>();//定义集合,同时限定了类型
al.add("papapap01");
al.add("papap02");
al.add("ppap03");
Interator<String> it=al.iterator();//迭代器,遍历元素,迭代器来源于集合。
while(it.hasNext())
{
String s=it.next();//去掉强转,仍能通过
System.out.println(S+":"+s.length());
}
二、泛型格式:通过<>来定义要操作的引用数据类型。类比函数的参数传递
在集合框架里,只要有<>,就必须定义泛型。