一、 泛型优点:安全机制,强制转换。
实例:
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()); }
二、泛型格式:通过<>来定义要操作的引用数据类型。类比函数的参数传递
在集合框架里,只要有<>,就必须定义泛型。
评论