Java泛型知识一
泛型可以对已有的数据结构定义成多种类型,比如String类型,Integer类型等等。
泛型类
泛型类是一个或多个类型参数的类。下面是一个用来存储键值对的简单泛型类。
public class Entry<K,V>{
private K key;
private V value;
public Entry(K key,V value){
this.key = key;
this.value = value;
}
public K getKey(){
return key;
}
public V getValue(){
return value;
}
}
泛型方法
如同泛型类是带类型参数的类一样,泛型方法是带类型参数的方法。可以是泛型类或者普通类的方法。下面是一个普通类的泛型方法的例子:
public class Arrays{
public static <T> void swap(T[] array,int i,int j){
T temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
当声明一个泛型方法时,类型参数要放在修饰符之后(public或者static等),返回类型之前(void或者int等)。
类型限定
有时,泛型类或方法的类型参数需要满足某些要求。你可以对类型作出限定,要求该类型继承某些类或者实现某些接口。
例如:假设你有一个类对象的ArrayList,该类实现了AutoCloseable接口,你想把它们全都关闭。
public static <T extends AutoCloseable> void closeAll(ArrayList<T> elems) throws Exception{
for (T elem:elems){
elem.close();
}
}
类型限定“extends AutoCloseable”确保元素类型是AutoCloseable的子类型。因此,调用elem.close()
是有效的。