解释Collections的语法。<String> emptyList()

我只研究了generics编程, List<E>接口和ArrayList ,所以我可以理解下面的语句。

 ArrayList<String> list = new ArrayList<String>(); 

但我不明白我在上网时看到的下一个声明。

 List<String> list2 = Collections.<String>emptyList(); 
  1. 什么是Collections ? 为什么不是Collections<E>Collections<String>
  2. 为什么<String>放在方法名称emptyList之前?

(不是emptyList<String>()正确的通用?)

  1. 这个声明是什么意思?

该行通过调用具有genericstypes参数的静态方法来创build一个空的string列表。

Collections类中,有一个声明如下的静态方法emptyList

 public static final <T> List<T> emptyList() { return (List<T>) EMPTY_LIST; } 

这有一个通用的types参数T 我们使用下面的方法调用这个方法:

 List<String> list = Collections.emptyList(); 

Tlist 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); } } 

我们可以调用它的构造函数,其中AStringBInteger如下所示:

 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();