Java的三元/条件运算符(?:)可以用来调用方法而不是赋值吗?
在像 http://en.wikipedia.org/wiki/?这样的页面中:三元/条件运算符似乎用于条件赋值。我试图用它来调用方法,就像这样:?:
(condition) ? doThis() : doThat();
这两种方法都返回 void。Java告诉我这不是一个声明。
所以,我猜我不能做条件方法调用...或者我可以吗?
在像 http://en.wikipedia.org/wiki/?这样的页面中:三元/条件运算符似乎用于条件赋值。我试图用它来调用方法,就像这样:?:
(condition) ? doThis() : doThat();
这两种方法都返回 void。Java告诉我这不是一个声明。
所以,我猜我不能做条件方法调用...或者我可以吗?
在这种情况下,可以将三元运算符视为一种方法。说(对于你正在考虑的意图和目的,请参阅lasseespeholt的评论)等同于调用伪代码方法:a ? b : c
ternary(a, b, c)
if a
return b
else
return c
这就是为什么人们可以说这样的话;这基本上就像说.当你说时,你实际上是在说:x = a ? b : c
x = ternary(a, b, c)
(condition) ? doThis() : doThat()
if condition
return doThis()
else
return doThat()
看看如果我们尝试用这些方法替换它们返回的内容会发生什么
if condition
return ???
else
return ???
考虑它甚至没有意义。 并且不返回任何内容,因为不是可实例化的类型,因此该方法也无法返回任何内容,因此Java不知道如何处理您的语句并抱怨。doThis()
doThat()
void
ternary
有一些方法可以解决这个问题,但它们都是不好的做法(你可以修改你的方法以获得一个返回值,但不要对它们返回的内容做任何事情,你可以创建一些新方法来调用你的方法,然后返回null,等等)。在这种情况下,最好只使用语句。if
编辑此外,还有一个更大的问题。即使您返回值,Java也不会考虑任何意义上的语句。a ? b : c
三元运算符只是句法糖。
它使代码更易于读/写,但它不会添加真正的功能。
它的主要用途是将几行代码压缩成一行,并且在基于某些条件构建仅略有不同的字符串时非常有用。
例如。
Collection<?> col = ...
System.out.println("There " + (col.size()==1 ? "is" : "are") + " "
+ col.size() + " " + (col.size()==1 ? "element" : "elements")
+ " in the collection");
而不是
Collection<?> col = ...
String message = "There ";
if(col.size()==1)
message += "is";
else
message += "are";
message += " "+col.size()
if(col.size()==1)
message += " element";
else
message += " elements";
message += " in the collection";
System.out.println(message);
如您所见,它简化了代码。
(注意:在第二个示例中,最好使用字符串串联而不是字符串串联)StringBuilder
但是,由于(没有返回值)具有相同的含义,因为有两种方法可以编写相同的内容,而无需添加功能。这只会使事情复杂化:(condition) ? doThis() : doThat();
if(condition) doThis(); else doThat();
void
所以不,三元运算不能用于条件方法调用。请改用 if-else:
if(condition)
doThis();
else
doThat();