泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制。
其好处是:
(一)将运行时期出现的问题CLassCastException(类型匹配异常),转移到了编译时期,方便与程序员解决问题,让运行时期问题减少,安全了。
(二)避免了强制类型转换,且运行时不会提示程序类型没检查的不安全提示。
版本升级无非包括三部分,1:程序高效,2:代码简化,3:安全提升。
在Java的集合中,我们往集合里面添加元素时并不指定元素的类型,在编译时并不会报有关类型错误,但是在程序运行时就有可能报类型错误,借鉴创建基本数组类型时指定其就是int类型或是其他的一种类型,就会在编译时检测出里面是否是指定的int类型,
如int[] aa = new int[20];赋值aa[1] = 3;不会报错,大师赋值aa[1]=3.5;编译时就会报错,因为类型不匹配。
源代码例子:
package 泛型;
import java.util.ArrayList;
import java.util.Iterator;
public class GenericDemo {//泛型演示
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<String> al = new ArrayList<String>();//指定集合里面只能添加String类型的数据,如果添加其他类型的就会报错
al.add("asd");
al.add("fgh");
al.add("jkl");
//al.add(4);错误,类型不匹配
//==al.add(new Integer(4));基本数据类型有自动装箱拆箱功能
//也要制定迭代器里面存储指定类型String
Iterator<String> it = al.iterator();//从类 java.util.AbstractList 继承的方法
while(it.hasNext())
{
String s = it.next();//制定了类型就不用强制类型转换了
//String s = (String)it.next();//没指定ArrayList类型并且Iterator类型时必须强制类型转换
System.out.println(s+":"+s.length());
}
}
}
===============================================================================
package 泛型;
//泛型在比较器中的应用,先按从长到短的顺序输出,再按字母顺序先后输出
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class GenericDemo2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//构造一个新的空 set,该 set 按照元素的自然顺序排序。TreeSet()
//构造一个新的空 set,该 set 根据指定的比较器进行排序。new LenComparator()
TreeSet<String> t = new TreeSet<String>(new LenComparator());
//TreeSet按顺序排序输出
t.add("z");
t.add("asd");
t.add("aasd");
t.add("zfgh");
t.add("jkl");
Iterator<String> it = t.iterator();
while(it.hasNext())
{
String s = it.next();
System.out.println(s);
}
}
}
//长度比较器
class LenComparator implements Comparator<String>{
@Override
public int compare(String o1,String o2) {
// TODO Auto-generated method stub
//int num = o1.length().compareTo(o2.length());//错误
int num = new Integer(o1.length()).compareTo(new Integer(o2.length()));
if(num==0)
return o1.compareTo(o2);
else
return num;
}
}