爪哇:三元没有回报。 (用于方法调用)
我想知道是否可以做一个三元操作,但没有返回任何东西。
如果在Java中不可能,那么在其他语言中是可能的,如果是的话,哪些是适用的?
name.isChecked() ? name.setChecked(true):name.setChecked(false);
不,你不能。 但是这个if-else
语句有什么意义呢? 你真的想保存7个字符吗?
if (name.isChecked()) { name.setChecked(true); } else { name.setChecked(false); }
或者如果你喜欢不好的风格:
if (name.isChecked()) name.setChecked(true); else name.setChecked(false);
不要紧,你可以做(在这种情况下)的事实:
name.setChecked(name.isChecked());
三元或“条件”运算符的要点是将条件引入到expression式中 。 换句话说,这个:
int max = a > b ? a : b;
是为了这个简写:
int max; if ( a > b ) { max = a; } else { max = b; }
如果没有产生任何价值,条件运算符就不是捷径。
我想知道是否可以做一个三元操作,但没有返回任何东西。
不,这是不可能的:
-
第二个和第三个操作数必须是非空的expression式; 即他们必须产生一些实际的价值。
“第二个或第三个操作数expression式是一个void方法的调用,这是一个编译时错误。” – JLS 15.25 。
-
三元expression式是一个expression式,不能用作语句。
“某些types的expression式可以用分号跟随它们来作为语句”。 …而三元的expression并不属于这种types–JLS 14.8 。
如果你真的想要使用三元expression式,但不使用expression式的值,那么最简单的方法是将该值赋给一个虚拟variables,并添加一个注释来抑制关于该variables未被使用的警告。
但更好的主意是使用一个普通的if
语句。
如果在Java中不可能,那么在其他语言中是可能的,如果是的话,哪些是适用的?
我有点生疏,但我相信C,C ++和Perl都允许任意expression式在不使用它们的地方使用。
有时候,你可以在方法参数上使用三元操作来解决你的请求。
name.setChecked(name.isChecked() ? true : false);
顺便说一句,你的peoblem的最佳解决scheme是
name.setCecked(name:isChecked());
在java下面的代码是不可能的:
(your-condition) ? (true-statements) : (false-statements)
对于示例,您不能编译以下snipet代码:
(1==1) ? System.out.println("") : System.out.println("");
你实现了以下编译错误:
The left-hand side of an assignment must be a variable
你必须返回一些值,如果你想让它像一个无效的方法那样执行一些操作而不返回一个值,它就不会工作。
希望这可以帮助…