该行通过使用泛型类型参数调用静态方法来创建一个空字符串列表。
在Collections类内部,有一个静态方法emptyList声明为:
public static final <T> List<T> emptyList() { return (List<T>) EMPTY_LIST;}
这具有通用类型参数T。我们使用以下方法调用此方法:
List<String> list = Collections.emptyList();
并被T推断为是String由于的类型list。
我们也可以T在调用时将其放在尖括号中来指定其类型emptyList。如果我们想要比推断的类型更具体的类型,则可能需要这样做:
List<? extends Object> list = Collections.<String>emptyList();
emptyList<String>()是不正确的,因为该放置仅在创建泛型类的实例而不是调用方法时才有效。当使用new两个可能的类型参数时,类名之前的仅用于构造函数,而类名之后的则用于整个实例,因此对于类:
class MyClass<A> { public <B> MyClass(A a, B b) {System.out.println(a + ', ' + b); }}
我们可以调用它的构造,其中A是String和B是Integer这样的:
MyClass<String> a = new <Integer>MyClass<String>('a', 3);
或使用类型推断:
MyClass<String> a = new MyClass<>('a', 3);通用方法类型推断解决方法
我只是研究了通用编程,List<E>接口和ArrayList,所以我可以理解下面的语句。
ArrayList<String> list = new ArrayList<String>();
但是我不理解在浏览网络时看到的下一条语句。
List<String> list2 = Collections.<String>emptyList();什么Collections啊 为什么不是Collections<E>还是Collections<String>?为什么<String>将方法名称放在前面emptyList?
(emptyList<String>()对于Generic来说不正确吗?)
该声明是什么意思?