在Java中转换条件运算符

时间:2015-04-30 09:48:11

标签: java eclipse list casting conditional-operator

这会在eclipse IDE中出错。(错误符号出现在行号附近)

String[] allText = null;

在此之后我做了一些事情,比如初始化数组等等。但根据一些条件。所以我想使用如下的条件运算符。

List<String> finalText = (allText != null) ?
    Arrays.asList(allText) : (List<String>) Collections.emptyList();

如果我在等号之后放置我的铸件,它运作良好。(包装完整的三元操作) 这个错误的目的是什么呢?

List<String> allHotels = (List<String>) ((allText != null) ?
    Arrays.asList(allText) : Collections.emptyList());

3 个答案:

答案 0 :(得分:1)

查看java.util.Collections代码,emptyList()方法如下所示:

public static <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

当你将emptyList()更改为EMPTY_LIST时,它将没有任何强制转换,但当然有警告(EMPTY_LIST是一个EmptyList类的实例,它像所有列表类一样通用)。问题是关于泛型参数,您必须设置类型。 如果你愿意,你可以这样做,甚至没有警告:

 List<String> finalText = ((allText != null) ? Arrays.asList(allText) : Collections
            .<String> emptyList());

答案 1 :(得分:1)

抱怨是因为编译器试图将强制转换应用于三元运算符的第一部分而不是整个表达式。所以这部分代码:

(List<String>) (allText != null)

这是正在播放的内容,但(allText != null)计算为布尔值。要进行演员表演,你需要包含整个表达式,如下所示:

List<String> allHotels = (List<String>) ((allText != null) ?
Arrays.asList(allText) : Collections.emptyList());

注意整个三元运算符周围的括号。

实际上你根本不需要进行转换,因为编译器会在执行Collections.emptyList()时推断出正确的类型

答案 2 :(得分:0)

以下评估为布尔。

(allText != null)

目前尚不清楚你的演员如何运作。错误是正确的。

 (List<String>) (true or false)

以下应该没问题。 (不确定我的问题是否正确)

List<String> allHotels =  (allText != null) ?
                Arrays.asList(allText) : Collections.emptyList();