Java 简短的IF-ELSE语句

Java 简短的IF-ELSE语句,java,if-statement,Java,If Statement,我试图使我的代码更具可读性,所以我决定使用一些简短的IF语句 这是我的代码,它不起作用(“不是语句”): 这个怎么了?需要括号吗?在哪里 jXPanel6.setVisible(jXPanel6.isVisible()); 或以您的形式: jXPanel6.setVisible(jXPanel6.isVisible()?true:false); 三元运算符只能是赋值的右侧,不能是其自身的语句 三元表达式x?y:z只能用于条件赋值。也就是说,你可以这样做: String mood = inPr

我试图使我的代码更具可读性,所以我决定使用一些简短的IF语句

这是我的代码,它不起作用(“不是语句”):

这个怎么了?需要括号吗?在哪里

jXPanel6.setVisible(jXPanel6.isVisible());
或以您的形式:

jXPanel6.setVisible(jXPanel6.isVisible()?true:false);

三元运算符只能是赋值的右侧,不能是其自身的语句

三元表达式
x?y:z
只能用于条件赋值。也就是说,你可以这样做:

String mood = inProfit() ? "happy" : "sad";
因为三元表达式正在返回某些内容(在本例中为
String

它并不是真正用来作为一个简短的、内联的
if-else
。特别是,如果单个部件不返回值或返回不兼容类型的值,则不能使用它。(因此,如果两个方法恰好返回相同的值,则可以这样做,但不应仅出于副作用目的调用它)

因此,正确的方法是使用if-else块:

if (jXPanel6.isVisible()) {
    jXPanel6.setVisible(true);
}
else {
    jXPanel6.setVisible(false);
}
当然可以缩短为

jXPanel6.setVisible(jXPanel6.isVisible());
对我来说,后两种表达方式更具可读性,因为它们更清楚地传达了你想要做的事情。(顺便问一下,你的条件是不是搞错了?看起来这是一个无操作,而不是一个切换)


不要混淆低字符数和可读性。关键是什么最容易理解;轻度误用语言特征肯定会让读者感到困惑,或者至少让他们在心理上产生双重感受。

正如其他人所指出的,某种形式的误用

x ? y : z
是表达式,而不是(完整)语句。它是一个右值,需要在某个地方使用,比如赋值的右边,或者函数的参数等等


也许你可以看看这个:

我参加聚会有点晚了,但为了将来的读者

据我所知,你只是想切换可见性状态,对吗?为什么不直接使用
操作员

jxPanel6.setVisible(!jxPanel6.isVisible);

这不是if语句,但我更喜欢这种方法来处理与您的示例相关的代码。

您可以这样简单地完成它,我在react hooks中完成了:

 (myNumber == 12) ? "true" : "false"
它等于下面的长if函数:

if (myNumber == 12) {
  "true"
} else {
  "false"
}

希望它能有所帮助尽管mautetto提供了一种更好的编写方法,但这种结构通常被称为三元运算符。(如果你想知道;)是条件运算符。“三元”只是意味着它有3个操作数。链接到条件运算符的语言规范:FWIW,我觉得根本不需要编写
?true:false
,因为它完全等同于
。显然!但是monczek询问了简短的If-Else语句,所以我编写它只是为了显示语法。另外,如果您试图切换状态,我认为该语句是向后的。这就是它不起作用的原因吗?是否应该是jXPanel6.isVisible()?jXPanel6.setVisible(false):jXPanel6.setVisible(true);如果它不是一个切换语句,那么我不理解将已经设置为这种方式的东西显示出来的目的。isVisible检索状态,setVisible设置状态,对吗?如果isVisible语句返回true,为什么要再次将其设置为true。我遗漏了什么吗?你不能只使用条件运算符来赋值。您可以在任何需要表达式的地方使用它。条件运算符只能用于赋值的RHS不是真的。它可以在任何可以使用表达式的地方使用。
if (myNumber == 12) {
  "true"
} else {
  "false"
}