添加到空列表

时间:2014-04-17 18:59:50

标签: java collections

当我执行下面的代码时,它没有任何问题。

List<String> singletonList = Collections.singletonList("Hello");
List<String> s = Collections.emptyList();
singletonList.addAll(s);

但是,当我尝试执行以下操作时,会给出编译错误。为什么呢?

List<String> singletonList = Collections.singletonList("Hello");
singletonList.addAll(List<String> Collections.emptyList());

Collections.emptyList是一种创建空列表的类型安全方法。但是为什么我的程序不能编译呢?我知道我不能添加到不可变列表(UnsupportedOperationException)但允许添加空列表。实际上我正在测试这个,我注意到了上面的事情。

2 个答案:

答案 0 :(得分:4)

Collections.emptyList()会返回List<Object>,而List<String>singletonList.addAll(Collections.<String>emptyList()); 没有任何关系,因此不允许投射。

您需要的是:

{{1}}

答案 1 :(得分:2)

在Java 8中,改进了类型推断。你可以做到

List<String> singletonList = Collections.singletonList("Hello");
singletonList.addAll(Collections.emptyList());

调用emptyList()的类型参数将从其使用的上下文中推断出来,即。它期望Collection<? extends String>