Мне было интересно, можно ли сделать тройную операцию, но ничего не возвращая.
Если это невозможно в Java, возможно ли это на других языках, если это применимо?
name.isChecked() ? name.setChecked(true):name.setChecked(false);
Мне было интересно, можно ли сделать тройную операцию, но ничего не возвращая.
Если это невозможно в 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());
Точка тернарного или условного оператора состоит в том, чтобы ввести условные выражения в выражение. Другими словами, это:
int max = a > b ? a : b;
предназначен для сокращения:
int max;
if ( a > b ) {
max = a;
} else {
max = b;
}
Если не производится никакого значения, условный оператор не является ярлыком.
Мне было интересно, можно ли сделать тройную операцию, но ничего не возвращая.
Нет, это невозможно:
Второй и третий операнды должны быть непустыми выражениями; то есть они должны производить некоторую фактическую величину.
"Это ошибка времени компиляции для второго или третьего выражения операнда как вызов метода void." - JLS 15.25.
Тернарное выражение является выражением и не может использоваться как оператор.
"Некоторые типы выражений могут использоваться в качестве операторов, следуя им с точками с запятой".... и тройное выражение не является одним из тех видов - JLS 14.8.
Если вы действительно хотите использовать трехмерное выражение, но не используете значение выражения, то самое простое - присвоить значение фиктивной переменной и добавить аннотацию для подавления предупреждения о том, что переменная не является б.
Но лучше всего использовать простой оператор if
.
Если это невозможно в Java, возможно ли это на других языках, если это применимо?
Я немного ржавый, но я считаю, что C, С++ и Perl позволяют произвольным выражениям использоваться в тех местах, где их значения не используются.
Иногда вы можете использовать троичную операцию над аргументами метода для решения вашего запроса.
name.setChecked(name.isChecked() ? true : false);
Кстати, лучшее решение для вашей проблемы
name.setChecked(name:isChecked());
В Java следующий код невозможен:
(your-condition) ? (true-statements) : (false-statements)
Например, вы не можете скомпилировать следующий фрагмент кода:
(1==1) ? System.out.println("") : System.out.println("");
Вы получаете следующую ошибку компиляции:
The left-hand side of an assignment must be a variable
Вы должны вернуть некоторое значение, и оно не будет работать, если вы хотите, чтобы он действовал как метод void, который выполняет какое-либо действие без возврата значения.
Надеюсь, что это поможет...