gpt4 book ai didi

java - 解释 Collections.emptyList() 的语法

转载 作者:IT老高 更新时间:2023-10-28 13:51:13 28 4
gpt4 key购买 nike

我刚刚学习了泛型编程,List<E>接口(interface)和ArrayList ,所以我可以理解下面的陈述。

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

但我不明白我在网上冲浪时看到的下一条语句。

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

(emptyList<String>() 不适合 Generic 吗?)

  1. 这句话是什么意思?

最佳答案

该行通过调用带有泛型类型参数的静态方法来创建一个空的字符串列表。

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

我们可以调用它的构造函数AStringBInteger喜欢:

MyClass<String> a = new <Integer>MyClass<String>("a", 3);

或使用类型推断:

MyClass<String> a = new MyClass<>("a", 3);

另请参阅:

关于java - 解释 Collections.<String>emptyList() 的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27683759/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com