爪哇:三元没有回报。 (用于方法调用)

我想知道是否可以做一个三元操作,但没有返回任何东西。

如果在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; } 

如果没有产生任何价值,条件运算符就不是捷径。

我想知道是否可以做一个三元操作,但没有返回任何东西。

不,这是不可能的:

  1. 第二个和第三个操作数必须是非空的expression式; 即他们必须产生一些实际的价值。

    “第二个或第三个操作数expression式是一个void方法的调用,这是一个编译时错误。” – JLS 15.25 。

  2. 三元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 

你必须返回一些值,如果你想让它像一个无效的方法那样执行一些操作而不返回一个值,它就不会工作。

希望这可以帮助…