三值运算符Java

三值运算符Java,java,ternary-operator,ternary,Java,Ternary Operator,Ternary,有没有办法在三元运算中实现这一点。我对这三元的东西还不熟悉,也许你可以指导我 if(selection.toLowerCase().equals("produkt")) cmdCse.setVisible(true); else cmdCse.setVisible(false); 这个似乎不起作用 selection.toLowerCase().equals("produkt")?cmdCse.setVisible(true):cmdCse.setVisible(false

有没有办法在三元运算中实现这一点。我对这三元的东西还不熟悉,也许你可以指导我

if(selection.toLowerCase().equals("produkt"))
     cmdCse.setVisible(true);
else
     cmdCse.setVisible(false);
这个似乎不起作用

selection.toLowerCase().equals("produkt")?cmdCse.setVisible(true):cmdCse.setVisible(false);

在这种情况下,您甚至不需要三元运算符:

 cmdCse.setVisible(selection.toLowerCase().equals("produkt"));
或者,清洁剂:

 cmdCse.setVisible(selection.equalsIgnoreCase("produkt"));
您的版本:

selection.toLowerCase().equals("produkt")? cmdCse.setVisible(true): cmdCse.setVisible(false);
语义不正确:三元运算符应表示可选赋值,它不能完全替代
if
语句。这没关系:

double wow = x > y? Math.sqrt(y): x;
因为您正在根据条件将
x
Math.sqrt(y)
分配给
wow

我的要点:只有当三元运算符使您的程序更清晰时,才使用它,否则您将最终得到一些无法理解的一行程序。

也许吧

cmdCse.setVisible(selection.toLowerCase().equals("produkt"));

我想这对你有用

cmdCse.setVisible(selection.toLowerCase().equals("produkt"));

三元运算符与if语句并不完全相同。三元运算符必须从两侧“返回”某些内容,因此将诸如setVisible()之类的void方法调用放在那里是行不通的

相反,您可以在根本不使用三元运算符的情况下执行类似操作:

cmdCse.setVisible(selection.toLowerCase().equals("product"));
但为了证明这一点,三元等价物看起来是这样的:

cmdCse.setVisible(selection.toLowerCase().equals("product") ? true : false);
请注意,现在三元运算符如何在两侧“返回”true或false,而不是直接调用void方法。

如果使代码更具可读性,请使用?:运算符而不是if-then-else语句;例如,当表达式紧凑且没有副作用(例如赋值)时

在您的情况下,
cmdCse.setVisible(真/假)
不返回任何内容,而且该操作还有副作用(它会更改
cmdCse
的状态),因此这里不能使用条件运算符(如果使用该运算符,则
分支必须具有相同的返回类型)


另请注意,
应被称为

以下是我的提示,如果需要将内容设置为布尔值,则只需使用setBoolean(条件),否则,如果需要将变量设置为非布尔值,则使用var=condition?result1:result2(如果条件为false,则不想更改变量本身),否则,使用if-else。

selection.toLowerCase().equals(“produkt”)
的计算结果为
true
false
,这与传递给
setVisible()
的值非常相似。为什么?它可读性较差,有时构建起来也不明显(比如……在这里和为您构建)。在没有优势的情况下,没有必要强制使用它(除非你选择代码高尔夫,但这对你的风格没有太大好处)。