编程语言
首页 > 编程语言> > Java中条件表达式中的空列表

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