这是jdk1.7.0_04.
我试图使用Collections.emptyList()而不是在条件中新建我自己的空列表:
List list = (anArray != null) ? Arrays.asList(anArray) : Collections.emptyList();
但是得到以下错误:
error: incompatible types
List list = (anArray != null) ? Arrays.asList(anArray) : Collections.emptyList();
^
required: List
found: List
where CAP#1 is a fresh type-variable:
CAP#1 extends Object from capture of ? extends Object
1 error
我能够想到我需要改变一些事情:
List list = (anArray != null) ? Arrays.asList(anArray) : Collections.emptyList();
但作为解决这个问题的一部分,我遇到了奇怪的(对我来说,无论如何)情况:
List alwaysEmpty = Collections.emptyList();
编译好,但是:
List alwaysEmpty = (List) Collections.emptyList();
给出以下编译错误:
error: inconvertible types
List alwaysEmpty = (List) Collections.emptyList();
^
required: List
found: List
有没有搞错??
现在我可以理解,或许由于一些奇怪的原因,使用条件运算符会以某种方式阻止类型推断系统意识到emptyList()调用的类型参数应该是String,因此需要明确指定它.但是为什么插入一个(公认的多余的)演员把事搞乱了?