Java:三元无回报.(用于方法调用)

Tyl*_*ade 45 java methods boolean return ternary

我想知道是否可以进行三元操作但没有返回任何东西.

如果在Java中不可能在其他语言中使用,那么哪些适用?

name.isChecked() ? name.setChecked(true):name.setChecked(false);
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 51

不,你不能.但是这个if-else声明的重点是什么呢?你真的想保存7个字符吗?

if (name.isChecked()) {
    name.setChecked(true);
} else {
    name.setChecked(false);
}
Run Code Online (Sandbox Code Playgroud)

或者如果你喜欢糟糕的风格:

if (name.isChecked()) name.setChecked(true); else name.setChecked(false);
Run Code Online (Sandbox Code Playgroud)

别介意你可以这样做(在这种情况下):

name.setChecked(name.isChecked());
Run Code Online (Sandbox Code Playgroud)

三元或"条件"运算符的要点是将条件引入表达式.换句话说,这个:

int max = a > b ? a : b;
Run Code Online (Sandbox Code Playgroud)

是为了简化:

int max;
if ( a > b ) {
    max = a;
} else {
    max = b;
}
Run Code Online (Sandbox Code Playgroud)

如果没有生成值,则条件运算符不是快捷方式.

  • 在我看来,使用 Stream.forEach lambda 在某些情况下,编写 (item -> item.isA() ? doA() : doB()) 比使用大括号和 if/else 扩展要优雅得多。 (5认同)
  • 不能的理由是什么?在某些情况下,对于更清晰的代码来说是有意义的。 (2认同)

Ste*_*n C 12

我想知道是否可以进行三元操作但没有返回任何东西.

不,这是不可能的:

  1. 第二个和第三个操作数必须是非void表达式; 即他们必须产生一些实际价值.

    "对于第二个或第三个操作数表达式来说,调用void方法是一个编译时错误." - JLS 15.25.

  2. 三元表达式是表达式,不能用作语句.

    "通过用分号跟随它们,可以使用某些表达式作为语句." ......而三元表达式不是其中之一 - JLS 14.8.

如果你真的想要使用三元表达式但不使用表达式的值,那么最简单的方法是将值赋给虚拟变量,并添加注释以抑制有关未使用的变量的警告.

但更好的想法是使用简单的if陈述.

如果在Java中不可能在其他语言中使用,那么哪些适用?

我有点生疏,但我相信C,C++和Perl都允许在不使用它们的值的地方使用任意表达式.


Ami*_*deh 5

有时,您可以对方法参数使用三元运算来解决您的请求.

name.setChecked(name.isChecked() ? true : false);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你的peoblem的最佳解决方案是

name.setChecked(name:isChecked());
Run Code Online (Sandbox Code Playgroud)