我刚学习了泛型编程,List<E>
接口和ArrayList
,所以我可以理解下面的陈述。
ArrayList<String> list = new ArrayList<String>();
但我不明白我在浏览网页时看到的下一个陈述。
List<String> list2 = Collections.<String>emptyList();
Collections
?为什么不是Collections<E>
或Collections<String>
?<String>
位于方法名称emptyList
之前?(对于Generic,emptyList<String>()
是否正确?)
答案 0 :(得分:58)
该行通过调用带有泛型类型参数的静态方法来创建一个空字符串列表。
在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);
另见:
答案 1 :(得分:11)
什么是
Collections
?为什么不是Collections<E>
或Collections<String>
?
Collections
是一个JDK类。
此类仅包含在或上运行的静态方法 返回集合。它包含操作的多态算法 集合,&#34;包装器&#34;,它们返回一个由a支持的新集合 指定的集合,以及其他一些可能的结果。
它不是通用的,无法实例化。
为什么
<String>
位于方法名称emptyList
之前?
Collections#emptyList
是一种通用方法。在这里,我们明确指定了一个类型参数String
。
(Isn&#39; t
emptyList<String>()
是否适合Generic?)
不,在Java中,方法的泛型类型参数位于方法名称之前。
该陈述的含义是什么?
我们正在调用静态emptyList
方法并将其返回值赋给类型为List<String>
的变量。
答案 2 :(得分:9)
简而言之,这会创建一个空的,不可变的字符串列表。
让我们一点一点地看一下表达式。
Collections
是一个类的名称。来自Javadoc:
此类仅包含对集合进行操作或返回集合的静态方法。它包含对集合进行操作的多态算法,&#34; wrappers&#34;,它返回由指定集合支持的新集合,以及其他一些可能性和结束。
emptyList()
是Collections
类(Javadoc)中定义的静态方法的名称。它是一种通用方法,<String>
中的Collections.<String>emptyList()
指定泛型类型参数。
该方法返回List<T>
,在本例中为List<String>
:字符串列表。更具体地说,它返回空,不可变字符串列表。
答案 3 :(得分:6)
1.Collection是一个接口,集合是一个静态类,只包含对集合进行操作或返回集合的静态方法。因此,我们无法使用Collections<E>
或Collections<String>
。
2. empty {之前的<String>
(用于获取不可变的空列表)表示只能添加String值。喜欢:
list2.add("A");
list2.add("B");
3.该语句表示它将创建一个List类型的不可变空列表。
您可以查看以下链接:Difference between Java Collection and Collections
答案 4 :(得分:6)
首先,Collections
是一个静态方法的辅助库,可以对各种类型的集合进行操作。如果您已经完成了任何类型的C ++编程,那么它与<algorithm>
函数库非常相似。
在这种情况下,您将调用静态方法emptyList()
,该方法返回特定类型的空列表。由于这些方法仍需要类型,但Collections
&#39;方法可以引用很多类型,你必须在调用时指定类型。
为了调用泛型方法,您必须在方法名称之前使用参数列表(即<String>
)调用它,但在点之后。
List<String> someList = Collections.<String>emptyList();