介紹
- 泛型就是數據類型的參數化表示,泛型的本質是參數化類型,經常使用E表明任何數據類型,在實際使用的時候把實際的數據類型傳遞給E。
- 泛型的好處是設計通用的功能,多個數據類型能夠共用。
- 泛型類型E只能表明Object類型,不能表明 int,double等基本類型,要使用Integer,Double代替這些基本類型。
由於E的上限類型默認是Object,所以只能使用Object類型或Object的子類。
泛型分類
接口泛型
// 集合泛型接口,在接口名後添加<E>
public interface Collection<E> {
// 接口中的泛型方法,直接使用接口中的泛型參數當作數據類型
boolean add(E e);
}
類泛型
// 列表泛型類,在類名後面添加<E>
public class ArrayList<E> extends AbstractList<E> implements List<E> {
// 泛型類中的泛型方法
public boolean add(E e) {
return true;
}
}
方法泛型
// 泛型方法, 在方法返回類型以前聲明泛型<E>
public static < E > void printArray( E[] inputArray )
{
// 輸出數組元素
for ( E element : inputArray ){
System.out.printf( "%s ", element );
}
System.out.println();
}
泛型通配符
類型通配符通常是使用 問好 ? 代替具體的類型參數。
例如 List<?> 在邏輯上是List<String>,List<Integer> 等全部List<具體類型實參>的父類。
上限泛型和下限泛型
泛型的上限通配符<? extends T>
<? extends T>是 Upper Bound(上限) 的通配符,用來限制元素的類型的上限,好比
List<? extends Fruit> fruits;
表示集合中的元素類型上限爲Fruit類型,即只能是Fruit或者Fruit的子類。
泛型的下限通配符<? super T>
<? super E> 是 Lower Bound(下限) 的通配符 ,用來限制元素的類型下限,好比
List<? super Apple> apples;
表示集合中元素類型下限爲Apple類型,即只能是Apple或Apple的父類。
參考