Подтвердить что ты не робот

Java: Тернар без возврата. (Для вызова метода)

Мне было интересно, можно ли сделать тройную операцию, но ничего не возвращая.

Если это невозможно в Java, возможно ли это на других языках, если это применимо?

name.isChecked() ? name.setChecked(true):name.setChecked(false);
4b9b3361

Ответ 1

Нет, вы не можете. Но какова точка этого над выражением 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;
}

Если не производится никакого значения, условный оператор не является ярлыком.

Ответ 2

Мне было интересно, можно ли сделать тройную операцию, но ничего не возвращая.

Нет, это невозможно:

  • Второй и третий операнды должны быть непустыми выражениями; то есть они должны производить некоторую фактическую величину.

    "Это ошибка времени компиляции для второго или третьего выражения операнда как вызов метода void." - JLS 15.25.

  • Тернарное выражение является выражением и не может использоваться как оператор.

    "Некоторые типы выражений могут использоваться в качестве операторов, следуя им с точками с запятой".... и тройное выражение не является одним из тех видов - JLS 14.8.

Если вы действительно хотите использовать трехмерное выражение, но не используете значение выражения, то самое простое - присвоить значение фиктивной переменной и добавить аннотацию для подавления предупреждения о том, что переменная не является б.

Но лучше всего использовать простой оператор if.

Если это невозможно в Java, возможно ли это на других языках, если это применимо?

Я немного ржавый, но я считаю, что C, С++ и Perl позволяют произвольным выражениям использоваться в тех местах, где их значения не используются.

Ответ 3

Иногда вы можете использовать троичную операцию над аргументами метода для решения вашего запроса.

name.setChecked(name.isChecked() ? true : false);

Кстати, лучшее решение для вашей проблемы

name.setChecked(name:isChecked());

Ответ 4

В 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

Ответ 5

Вы должны вернуть некоторое значение, и оно не будет работать, если вы хотите, чтобы он действовал как метод void, который выполняет какое-либо действие без возврата значения.

Надеюсь, что это поможет...