java范型简介
一.简单认识java范型
经常听人说“范型”,我一直不是太明白什么叫“范型”,今天就查阅了一些文章,给我的第一感觉就是之所以在java中用范型,就是为了让一些错误在编译阶段就可以暴露出来,而不用在运行阶段才抛出异常。下面给出一个简单例子来说明。
/**
*没有利用范型的例子
*/
public void example1() {
ArrayListarray = new ArrayList();
array.add( " thisisastring " );
array.add( new Integer( 3 )); // 这里可以正确添加
Iteratoriterator = array.iterator();
while (iterator.hasNext()) {
Stringstr = (String)iterator.next(); // 编译时没错,但在运行时会抛出ClassCastException异常
System.out.println(str);
}
}
*没有利用范型的例子
*/
public void example1() {
ArrayListarray = new ArrayList();
array.add( " thisisastring " );
array.add( new Integer( 3 )); // 这里可以正确添加
Iteratoriterator = array.iterator();
while (iterator.hasNext()) {
Stringstr = (String)iterator.next(); // 编译时没错,但在运行时会抛出ClassCastException异常
System.out.println(str);
}
}
public
void
example2()
{
ArrayList < String > array = new ArrayList < String > ();
array.add( " thisisastring " );
// array.add(newInteger(3)); // 编译时会报异常:Themethodadd(String)inthetypeArrayList<String>isnotapplicableforthearguments(Integer)
Iterator < String > iterator = array.iterator();
while (iterator.hasNext()) {
Stringstr = iterator.next(); // 这里就不需要进行强制类型转换
System.out.println(str);
}
}
ArrayList < String > array = new ArrayList < String > ();
array.add( " thisisastring " );
// array.add(newInteger(3)); // 编译时会报异常:Themethodadd(String)inthetypeArrayList<String>isnotapplicableforthearguments(Integer)
Iterator < String > iterator = array.iterator();
while (iterator.hasNext()) {
Stringstr = iterator.next(); // 这里就不需要进行强制类型转换
System.out.println(str);
}
}
这样,我们在编译阶段就可以捕获可能存在地危险。
通过以上简单例子,我们可以看出,使用java范型的好处有:
- 内在的类型转换优于在外部的人工转换
- 类型的匹配问题在编译阶段就可以发现,而不用在运行阶段
二.创建自己的范型
任何类,接口,异常,方法都可以使用范型,下面是个简单的例子,使用范型来比较两个对象的大小,两个对象必须都实现了Comparable接口。
public
<
T
extends
Comparable
>
Tmax(Tt1,Tt2)
{
if (t1.compareTo(t2) <= 0 ) {
return t2;
} else {
return t1;
}
}
if (t1.compareTo(t2) <= 0 ) {
return t2;
} else {
return t1;
}
}
三.参考资料
1. java 范型攻略篇