相关疑难解决方法(0)

解释集合的语法.<String> emptyList()

我刚学习了泛型编程,List<E>界面ArrayList,所以我可以理解下面的陈述.

ArrayList<String> list = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

但我不明白我在浏览网页时看到的下一个陈述.

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

(emptyList<String>()Generic 不正确吗?)

  1. 该陈述是什么意思?

java generics collections

70
推荐指数
5
解决办法
4786
查看次数

为什么Java的类型推断如此弱?

说,我有一个方法:

public static <T> Collection<T> addToCollection(T element, Collection<T> collection) {
    collection.add(element);
    return collection;
}
Run Code Online (Sandbox Code Playgroud)

然后在尝试编译此代码时:

Integer i = 42;
Collection<Integer> result = addToCollection(i, Collections.emptyList());
Run Code Online (Sandbox Code Playgroud)

我收到一个错误Type mismatch: cannot convert from Collection<Object> to Collection<Integer>.任何人都可以解释为什么类型系统无法推断Collections.emptyList()应该是类型Collection<Integer>

上面的例子显然是非常人为的,但我一直偶然发现这个限制,这真的很烦人.在阅读了Effective Java之后,我发现你可以简单地做Collections.<Integer>emptyList()(必须说,那对我来说这是一个很好的启示)并且让所有东西都能顺利编译,但是当你有一些复杂的类型时,那真的是令人讨厌的.

我只是想知道这是不是某种错误,还是有任何正当理由让它以这种方式工作?

java generics type-inference

5
推荐指数
1
解决办法
449
查看次数

标签 统计

generics ×2

java ×2

collections ×1

type-inference ×1