泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制
1、泛型概述
好处
1.将运行时期出现问题ClassCastException,转移到了编译时期。方便于程序员解决问题。让运行时问题减少,安全。
2,避免了强制转换麻烦。
泛型格式:通过<>来定义要操作的引用数据类型。
在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见,只要见到<>就要定义泛型。其实<> 就是用来接收类型的。
1、泛型概述
好处
1.将运行时期出现问题ClassCastException,转移到了编译时期。方便于程序员解决问题。让运行时问题减少,安全。
2,避免了强制转换麻烦。
泛型格式:通过<>来定义要操作的引用数据类型。
在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见,只要见到<>就要定义泛型。其实<> 就是用来接收类型的。
使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
比如代码;
import java.util.*;
public class GenericDemo
{
public static void main(String[] args)
{
ArrayList L=new ArrayList();
L.add("001");
L.add("002");
L.add("003");
L.add("004");
L.add(005);
ListIterator it=L.listIterator();
while(it.hasNext())
{
String s=(String)it.next();
System.out.println(s+"...."+s.length());
}
}
}
结果如下:
发现报错了,因为集合可以存储各种类型的对象,因此在使用时,可以存入005,并由于自动装箱,将其作为new Integer(005)存入L集合中,但是在迭代取的过程中,Integer类型的对象不能够自动转换至String类型的对象,所以在编译时通过,但是发生运行时异常报错。
为了能够使这种错误在编译时就明朗,解决这种安全问题,应用泛型!
代码如下:
可见此程序在规定泛型后,写入L.add(005)时在编译过程中就提示有错误了!而在ListIterator后定义迭代器接收类型后,在Sting s=it.next();都不用进行强制类型转换了!
2、泛型应用
在比较器中应用泛型,
可以看出,在创建比较器时,可以定义泛型,即指定类型进行比较:
代码如下
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class LenComparator implements Comparator<String>
{//按照字符串长度比较,若字符串长度相同,再按照字符串的自然顺序比较
public int compare(String obj1,String obj2)
{
String s1=obj1;
String s2=obj2;
int i=new Integer(s1.length()).compareTo(new Integer(s2.length()));
if(i>0)
return 1;
else if(i==0)
return s1.compareTo(s2);
else
return -1;
}
}
public class generic01
{
public static void main(String[] args)
{
TreeSet<String> T=new TreeSet<String>(new LenComparator());
T.add("001");
T.add("0002");
T.add("00005");
T.add("004");
T.add("0003");
Iterator<String> it=T.iterator();
while(it.hasNext())
{
System.out.println(".."+it.next());
}
}
}
结果如下:
并且由于定义了比较器泛型,在程序编译中不会有警告提示,保证了程序的安全性;同时在比较器中,避免了类型强制转换!