在Java中转换条件运算符

Jud*_*han 5 java eclipse casting list conditional-operator

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

String[] allText = null;
Run Code Online (Sandbox Code Playgroud)

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

List<String> finalText = (allText != null) ?
    Arrays.asList(allText) : (List<String>) Collections.emptyList();
Run Code Online (Sandbox Code Playgroud)

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

List<String> allHotels = (List<String>) ((allText != null) ?
    Arrays.asList(allText) : Collections.emptyList());
Run Code Online (Sandbox Code Playgroud)

tdd*_*key 1

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

(List<String>) (allText != null)
Run Code Online (Sandbox Code Playgroud)

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

List<String> allHotels = (List<String>) ((allText != null) ?
Arrays.asList(allText) : Collections.emptyList());
Run Code Online (Sandbox Code Playgroud)

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

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