三元运算符Java

Ste*_*ger 13 java ternary-operator ternary

有没有办法在三元操作中实现这一点.我对那些三元组的东西很新,也许你可以指导我.

if(selection.toLowerCase().equals("produkt"))
     cmdCse.setVisible(true);
else
     cmdCse.setVisible(false);
Run Code Online (Sandbox Code Playgroud)

这个似乎不起作用.

selection.toLowerCase().equals("produkt")?cmdCse.setVisible(true):cmdCse.setVisible(false);
Run Code Online (Sandbox Code Playgroud)

Ste*_*ppo 25

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

 cmdCse.setVisible(selection.toLowerCase().equals("produkt"));
Run Code Online (Sandbox Code Playgroud)

或者,清洁:

 cmdCse.setVisible(selection.equalsIgnoreCase("produkt"));
Run Code Online (Sandbox Code Playgroud)

你的版本:

selection.toLowerCase().equals("produkt")? cmdCse.setVisible(true): cmdCse.setVisible(false);
Run Code Online (Sandbox Code Playgroud)

在语义上是不正确的:三元运算符应该代表替代分配,它不是if语句的完全替代.还行吧:

double wow = x > y? Math.sqrt(y): x;
Run Code Online (Sandbox Code Playgroud)

因为你要么分配xMath.sqrt(y)wow,根据条件.

我的2cents:只有当你的程序更清晰时才使用三元运算符,否则你最终会得到一些难以理解的单行程序.


Rei*_*eus 9

也许

cmdCse.setVisible(selection.toLowerCase().equals("produkt"));
Run Code Online (Sandbox Code Playgroud)


Kev*_*man 5

三元运算符与if语句不完全相同.三元运算符必须从两边"返回"某些东西,因此将void方法调用(如setVisible())放在一起将无效.

相反,你可以在没有三元运算符的情况下做这样的事情:

cmdCse.setVisible(selection.toLowerCase().equals("product"));
Run Code Online (Sandbox Code Playgroud)

但为了证明这一点,三元等效物看起来像这样:

cmdCse.setVisible(selection.toLowerCase().equals("product") ? true : false);
Run Code Online (Sandbox Code Playgroud)

注意现在三元运算符如何"返回"两侧的true或false,而不是简单地调用void方法.