其實這並不怪異,只是一般情況下用不到這種寫法。這個東西的標準名稱爲“泛型方法”。極少數情況,我們需要返回一個List<?>的class type。
@Override public Class<List<MobileRowData>> getPresentationType() { return (Class<List<MobileRowData>>) Collections.<MobileRowData>emptyList().getClass(); }
以後遇上這樣的東西,就可以這樣寫。
如果你去看了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,那麼就可以將上述源代碼看成:
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()方法時設置泛型。
開發人員在調用emptyList()方法時可以用如下這種方式指定<T>:
Collections.<String>emptyList(); //返回 List<String>