其实这并不怪异,只是通常状况下用不到这种写法。这个东西的标准名称为“泛型方法”。极少数状况,咱们须要返回一个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>