一種很是「怪異」的包含兩層generic返回Class類型的寫法

其實這並不怪異,只是通常狀況下用不到這種寫法。這個東西的標準名稱爲「泛型方法」。極少數狀況,咱們須要返回一個List<?>的class type。java

@Override
public Class<List<MobileRowData>> getPresentationType() {
    return (Class<List<MobileRowData>>) Collections.<MobileRowData>emptyList().getClass();
}

之後趕上這樣的東西,就能夠這樣寫。ide


若是你去看了Collections.emptyList()方法的源代碼(JDK1.7.0_80),你就會發現一些很是有用的信息。源代碼以下:開發

@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

方法聲明中的第一行中第一個<T>表示這個emptyList方法聲明、方法體、方法參數列表中會用到這個<T>。若是T是String,那麼就能夠將上述源代碼當作:get

public static final List<String> emptyList() {
    return (List<String>) EMPTY_LIST;
}

固然,上面的代碼只是給你解釋若是<T>是String時,<T> List<T> emptyList()的等效代碼,從功能上看兩段代碼並不等效。也就是說,<T> List<T> emptyList()給了開發人員在調用emptyList()方法時指定泛型的機會。而LIst<String> emptyList()這種聲明方式沒有留機會給開發人員在其調用emptyList()方法時設置泛型。it

開發人員在調用emptyList()方法時能夠用以下這種方式指定<T>:io

Collections.<String>emptyList();  //返回 List<String>
相關文章
相關標籤/搜索