上篇我們簡單的介紹了java中泛型的最基本的內(nèi)容,知道了什么是泛型以及泛型對我們的程序編寫有什么好處,最后一類型限定收尾。本篇將從類型限定開始闡述java泛型中很重要的概念:通配符
一、何為通配符
首先我們看一段代碼:
/*我們聲明了一個泛型方法*/public class Pair<T> {
public static <T extends Double> void show(myArray<T> a){
}
}
上文聲明了一個泛型方法,但是實在是太過啰嗦,于是我們可以使用通配符來簡化這種泛型方法的聲明形式。有時我們也稱通配符為更加簡潔的類型變量的限定。接下來我們看看使用通配符如何聲明一個泛型方法。
public class Pair<T> {
public static void show(myArray<? extends Double> a){
}
}
對比兩段代碼,我們可以看出來,類型限定也就是<T extends Double>主要用于類型參數(shù)的定義,聲明在訪問修飾符后面函數(shù)返回值之前;而通配符也就是<? extends Double>主要用于實例化類型參數(shù),聲明在類型變量之前,簡化了泛型方法的聲明。所以,凡是可以由通配符實現(xiàn)的都可以使用類型限定來實現(xiàn),因為通配符是簡化了的類型限定。
二、通配符的只讀性
以上是這個通配符的一個特性,通配符的只讀性是其第二個重要特性,我們知道:Child類繼承于Base類是不能推出Pair<Child>繼承于Pair<Base>的,所以:
public static void print(Pair<Base>){
}