Java中条件表达式中的空列表
作者:互联网
参见英文答案 > Collections.emptyList() returns a List<Object>? 3个
以下代码段发出编译器错误.
public List<Long> test()
{
boolean b=true;
return b ? Collections.emptyList() : Collections.emptyList();
}
incompatible types required:
List<Long>
found:List<Object>
它需要通用类型,如,
public List<Long> test()
{
boolean b=true;
return b ? Collections.<Long>emptyList() : Collections.<Long>emptyList();
}
如果删除此三元运算符,例如
public List<Long> test()
{
return Collections.emptyList();
}
或者如果它由if-else构造表示,如,
public List<Long> test()
{
boolean b=true;
if(b)
{
return Collections.emptyList();
}
else
{
return Collections.emptyList();
}
}
然后编译好.
为什么不编译第一个案例?在jdk-7u11上测试过.
解决方法:
在三元表达式的情况下,编译器没有机会根据测试方法的返回类型推断方法Collections.emptyList()的返回类型.相反,首先它必须解决(三元)表达式的结果类型.并且由于未提及类型,因此它变为List< Object>并且与测试方法的返回类型不兼容.
但是在返回Collections.emptyList()时,它具有可用的(右)上下文(即测试方法的返回类型),它用于推断Collections.emptyList()的返回类型应该是什么.
标签:java,collections,arraylist,generics,conditional-operator 来源: https://codeday.me/bug/20190831/1778883.html