三元运算符Java

有没有办法在三元操作中实现这一点。 我对这个三元的东西很陌生,也许你可以指导我。

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语句的完整replace。 还行吧:

 double wow = x > y? Math.sqrt(y): x; 

因为你正在分配xMath.sqrt(y) wow这取决于一个条件

我的2cents:只有在使你的程序更清晰的情况下才使用三元运算符,否则你最终会得到一些难以辨认的单行程序。

也许

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

三元运算符不完全像一个if语句。 一个三元运算符必须从两边“返回”一些东西,所以把setVisible()这样的void方法调用不起作用。

相反,如果没有三元操作符,你可以做这样的事情:

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

但是为了certificate这一点,三元相当于这样的:

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

请注意,现在三元运算符如何在“双方”返回true或false而不是简单地调用void方法。

我认为这会为你工作

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

直接从文档

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

在你的情况cmdCse.setVisible(true / false); 不会返回任何东西,而且操作也有副作用(它改变了cmdCse状态),所以这里不能使用条件运算符(当你使用运算符的时候, ?:分支都必须有相同的返回types)。

另外,请注意.. ? .. : .. .. ? .. : ..应该被称为conditional operator

这里是我的提示,如果你需要设置布尔值,那么简单的使用setBoolean(condition),否则,如果你需要设置一个variables为非布尔值,那么使用var = condition?result1:result2(或者variables本身如果你不想改变,如果条件是假的),否则,使用,如果其他。