三元运算符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;
因为你正在分配x
或Math.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本身如果你不想改变,如果条件是假的),否则,使用,如果其他。