繁体   English   中英

在Java中转换条件运算符

[英]casting inside conditional operator in Java

这在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());

查看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());

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

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

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

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

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

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

以下评估为布尔。

(allText != null)

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

 (List<String>) (true or false)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM