泛型
泛型
v 什么是泛型
v 泛型的发展
v 泛型的作用
v 参考文献
什么是泛型
泛型是JDK1.5以来新增的特性
<T> 以尖括号中间放入一个字母,或才几个字母,大小写不分的,一般,我用的是T
泛型的发展
v 泛型借鉴于C++ 中的模板
template <typename T>
int compare(const T &v1, const T &v2)
{
if (v1 < v2) return -1;
if (v2 < v1) return 1;
return 0;
}
泛型的发展
v C++类模板
template <class Type>
class QueueItem {
QueueItem(const Type &t): item(t), next(0)
{ }
Type item ;
QueueItem *next;
};
泛型应用
package com.aua.example;
public class TestA<Tl,T2,T3> {
Tl t1;T2 t2;T3 t3;
public TestA(Tl t1,T2 t2, T3 t3){
this.t1 = t1;
this.t2=t2;
this.t3 = t3;
}
public Tl test(T2 t){
return t1;
}
}
泛型应用在方法上
v public <T> T test1(){
v return (T)null;
v }
泛型应用,泛型中几个特殊的
public TestA<?,?,?> getInstance(){
return this;
}
泛型限制
package com.aua.example;
import java.util.List;
public class TestB<T extends List<? super String>,T1> {
public T1 test(){
return null;
}
}
泛型的应用
泛型应用
合适的地方应用一下,让JDK帮我编译时检查
((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
这条语句可以得到泛型的实际占位类,个人认为作用不大,
张孝祥的视屏里好像有讲,但我没有看过
泛型的应用
v 泛型是运行时擦除的,在运行时,List<E> 和List<A> 是一样的
参考文献
http://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf