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