可以使用Java的三元/条件运算符(?:)来调用方法而不是赋值吗?

Vol*_*ort 28 java conditional-operator

在像http://en.wikipedia.org/wiki/?这样的页面中:三元/条件运算符?:似乎用于条件赋值.我尝试将它用于方法调用,如下所示:

(condition) ? doThis() : doThat();
Run Code Online (Sandbox Code Playgroud)

两种方法都返回void.Java告诉我这不是一个声明.

所以,我猜我不能做条件方法调用......或者我可以吗?

Jod*_*aka 22

在这种情况下,可以将三元运算符视为一种方法.说a ? b : c是(对于你正在考虑的意图和目的,请参阅lasseespeholt的评论)等同于调用伪代码方法:

ternary(a, b, c)
    if a
        return b
    else
        return c
Run Code Online (Sandbox Code Playgroud)

这就是为什么人们会说出类似的话x = a ? b : c; 它基本上就像说x = ternary(a, b, c).当你说(condition) ? doThis() : doThat(),你实际上在说:

if condition
    return doThis()
else
    return doThat()
Run Code Online (Sandbox Code Playgroud)

看看如果我们试图用这些方法替换它们返回的内容会发生什么

 if condition
    return ???
 else
    return ???
Run Code Online (Sandbox Code Playgroud)

考虑它甚至没有意义. doThis()并且doThat()不返回任何内容,因为void它不是可实例化的类型,因此该ternary方法也不能返回任何内容,因此Java不知道如何处理您的语句和抱怨.

有很多方法,但它们都是不好的做法(你可以修改你的方法以获得返回值,但不对它们返回的内容做任何事情,你可以创建调用你的方法然后返回null的新方法,等等).if在这种情况下,你只是使用一个语句会好得多.

编辑 此外,还有一个更大的问题.即使您返回值,Java也不会考虑a ? b : c任何语句.

  • @Jodaka,我认为你的编辑是正确的答案,因为它不是真正关于返回一个值,它是关于Java不考虑?b:c作为陈述. (4认同)