Can Java';s三元/条件运算符(?:)是否用于调用方法而不是赋值?

Can Java';s三元/条件运算符(?:)是否用于调用方法而不是赋值?,java,conditional-operator,Java,Conditional Operator,在诸如三元/条件运算符?:之类的页面中,似乎用于条件赋值。我尝试将其用于方法调用,如下所示: (condition) ? doThis() : doThat(); 这两种方法都返回void。Java告诉我它不是一个语句 所以,我猜我不能做条件方法调用。。。或者,我可以把三元运算符想象成这种情况下的一种方法。说a?b:c相当于调用伪代码方法(出于您考虑的目的,请参见LasseSpeholt的注释): ternary(a, b, c) if a return b e

在诸如三元/条件运算符
?:
之类的页面中,似乎用于条件赋值。我尝试将其用于方法调用,如下所示:

(condition) ? doThis() : doThat();
这两种方法都返回void。Java告诉我它不是一个语句


所以,我猜我不能做条件方法调用。。。或者,我可以把三元运算符想象成这种情况下的一种方法。说
a?b:c
相当于调用伪代码方法(出于您考虑的目的,请参见LasseSpeholt的注释):

ternary(a, b, c)
    if a
        return b
    else
        return c
这就是为什么人们可以说
x=a?b:c
;这基本上就像说
x=trialum(a,b,c)
。当你说
(条件)时?doThis():doThat()
,您实际上是在说:

if condition
    return doThis()
else
    return doThat()
看看如果我们尝试用这些方法替换它们返回的结果会发生什么

 if condition
    return ???
 else
    return ???
这是没有道理的。code>doThis()和
doThat()
不返回任何内容,因为
void
不是可实例化的类型,因此
trialent
方法也不能返回任何内容,所以Java不知道如何处理您的语句,并且会抱怨

有很多方法可以解决这个问题,但它们都是不好的做法(您可以修改您的方法使其具有返回值,但不处理它们返回的内容,您可以创建调用您的方法然后返回null的新方法,等等)。在这种情况下,您最好只使用
if
语句


编辑此外,还有一个更大的问题。即使返回值,java也不考虑<代码>?b:c任何意义上的语句。

三元运算符只是语法糖
它使代码更易于读/写,但并没有添加真正的功能。
它的主要用途是将几行代码压缩成一行,在基于某些条件构建仅略有不同的字符串时非常有用

例如

三元(条件)运算符返回一个值。如果您的方法没有,则它们不能用作运算符的一部分(在运算符中获取值)

为了更好地理解它,让我们考虑一个简单的二进制运算符:
+
。它是这样工作的:

<eval1> + <eval2>  -->  <value>
gimmeAValue = testMe() ? returnThis() : returnThat();
甚至

gimmeAValue = doThis() + doThat();
它将失败,因为无论是
doThis()
还是
doThat()
都不会计算任何值(它们“返回”
void
)。 当然,
必须是某种“兼容”类型,以便
+
运算符可以处理它们并返回某种类型的值

现在让我们看看三元运算符:

<evalBoolean> ? <eval1> : <eval2>  -->  <value>

不,不是那样的。只需像普通人一样使用
if
。我相信三元运算符应该为类型的实例赋值,并进行条件检查。您建议的方式不符合格式。@codesparkle-没有太多空间。如果(条件){doThis();}或者{doThis();}您可以使您的方法返回
Void
;)Void与Void不同。大写字母起作用。”说a?b:c相当于调用伪代码方法“True”。我将澄清我正在简化。@ Jodaka,我认为你的编辑是正确的答案,因为它不是真正的返回价值,它是关于java不考虑的?b:c作为声明。
doThis() + doThat();
gimmeAValue = doThis() + doThat();
<evalBoolean> ? <eval1> : <eval2>  -->  <value>
gimmeAValue = testMe() ? returnThis() : returnThat();