解释Collections的语法。<String> emptyList()
我只研究了generics编程, List<E>
接口和ArrayList
,所以我可以理解下面的语句。
ArrayList<String> list = new ArrayList<String>();
但我不明白我在上网时看到的下一个声明。
List<String> list2 = Collections.<String>emptyList();
- 什么是
Collections
? 为什么不是Collections<E>
或Collections<String>
? - 为什么
<String>
放在方法名称emptyList
之前?
(不是emptyList<String>()
正确的通用?)
- 这个声明是什么意思?
该行通过调用具有genericstypes参数的静态方法来创build一个空的string列表。
在Collections
类中,有一个声明如下的静态方法emptyList
:
public static final <T> List<T> emptyList() { return (List<T>) EMPTY_LIST; }
这有一个通用的types参数T
我们使用下面的方法调用这个方法:
List<String> list = Collections.emptyList();
T
被list
String
因为list
的types。
我们也可以在调用emptyList
时候把它放在尖括号中来指定T
的types。 如果我们想要一个比推断的更具体的types,这可能是需要的:
List<? extends Object> list = Collections.<String>emptyList();
emptyList<String>()
是不正确的,因为该位置仅在创buildgenerics类的实例时有效,而不是调用方法。 当使用new
,有两个可能的types参数,类名前面的是仅用于构造函数,而类名后面的是整个实例,所以类:
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);
或通过使用types推断:
MyClass<String> a = new MyClass<>("a", 3);
也可以看看:
- 通用方法
- types推断
什么是
Collections
? 为什么不是Collections<E>
或Collections<String>
?
Collections
是一个JDK类。
这个类完全由运行或返回集合的静态方法组成。 它包含对集合进行操作的多态algorithm,“包装器”,返回由指定集合支持的新集合,以及其他一些可能性和结束。
它不是通用的,不能被实例化。
为什么
<String>
放在方法名称emptyList
之前?
Collections#emptyList
是一个通用的方法。 在这里,我们明确地指定了一个types参数String
。
(不是
emptyList<String>()
正确的通用?)
不,在Java中,方法的genericstypes参数出现在方法名称之前。
这个声明是什么意思?
我们正在调用静态emptyList
方法,并将其返回值分配给List<String>
types的variables。
简而言之,这将创build一个空的,不可变的string列表。
让我们一点一点看看expression式。
Collections
是一个类的名称。 从Javadoc :
这个类完全由运行或返回集合的静态方法组成。 它包含对集合进行操作的多态algorithm,“包装器”,返回由指定集合支持的新集合,以及其他一些可能性和结束。
emptyList()
是Collections
类( Javadoc )中定义的静态方法的名称。 这是一个通用的方法,而Collections.<String>emptyList()
指定genericstypes参数。
该方法返回一个List<T>
,在这种情况下是List<String>
:一个string列表。 更具体地说,它返回一个空的 , 不可变的string列表。
1.Collection是一个接口,集合是一个静态类,它是由静态方法组成的,它们对集合进行操作或返回集合。 因此我们不能使用Collections<E>
或Collections<String>
。
emptyList之前的<String>
(用于获取不可变的空列表)表示只能添加String值。 喜欢:
list2.add("A"); list2.add("B");
3.声明意味着它将创build一个不可变的Listtypes的空列表。
您可以查看以下链接: Java Collection和Collections之间的区别
首先, Collections
是对各种types的集合进行操作的静态方法的辅助库。 如果您已经完成了任何types的C ++编程,那么它就是<algorithm>
函数库的同义词。
在这种情况下,你正在调用静态方法emptyList()
,它返回一个特定types的空列表。 由于这些方法仍然需要一个types,但是Collections
的方法可以引用很多types,所以你必须在调用时指定types。
为了调用一个通用的方法 ,你必须在方法名之前调用它的参数列表(即<String>
),但在点之后。
List<String> someList = Collections.<String>emptyList();