Тернарные Операторы Java
есть ли способ реализовать это в троичной операции. Я очень новичок в этом троичном материале, может быть, вы могли бы направить меня.
if(selection.toLowerCase().equals("produkt"))
cmdCse.setVisible(true);
else
cmdCse.setVisible(false);
этот, похоже, не работает.
selection.toLowerCase().equals("produkt")?cmdCse.setVisible(true):cmdCse.setVisible(false);
6 ответов
в этом случае вам даже не нужен тернарный оператор:
cmdCse.setVisible(selection.toLowerCase().equals("produkt"));
или, яснее:
cmdCse.setVisible(selection.equalsIgnoreCase("produkt"));
ваш вариант:
selection.toLowerCase().equals("produkt")? cmdCse.setVisible(true): cmdCse.setVisible(false);
семантически неправильных: тернарный оператор должен представлять альтернативные задания, это не полная замена для if
заявления. Это нормально:
double wow = x > y? Math.sqrt(y): x;
потому что вы присваиваете либо x
или Math.sqrt(y)
to wow
, в зависимости от состояния.
мой 2cents: используйте троичный оператор только тогда, когда он делает вашу программу более ясной, иначе у вас будут неразборчивые однострочные.
тернарный оператор не совсем похож на Оператор if. Тернарный оператор должен "возвращать" что-то с обеих сторон, поэтому вызов void-метода, такого как setVisible (), не будет работать.
вместо этого вы можете сделать что-то подобное без троичных операторов вообще:
cmdCse.setVisible(selection.toLowerCase().equals("product"));
но просто чтобы продемонстрировать точку, троичный эквивалент будет выглядеть примерно так:
cmdCse.setVisible(selection.toLowerCase().equals("product") ? true : false);
обратите внимание, как теперь тернарный оператор "возвращает" true или false на обоих стороны вместо простого вызова метода void.
Я думаю, что это будет работать для вас
cmdCse.setVisible(selection.toLowerCase().equals("produkt"));
напрямую документы
использовать ?: оператор вместо оператора if-then-else, если он делает ваш код более читаемым; например, когда выражения компактны и без побочных эффектов (таких как назначения).
в вашем случае cmdCse.setVisible(true / false);
ничего не возвращает, и операция также имеет побочные эффекты (она изменяет состояние cmdCse
), поэтому условный оператор не может использоваться здесь (когда вы используете оператор, оба из the ?
и :
ветви должны иметь одинаковый тип возврата).
в сторону, обратите внимание, что .. ? .. : ..
следует называть conditional operator
вот мои советы, Если вам нужно установить вещи в логические значения, то просто используйте setBoolean (условие), иначе, если вам нужно установить переменную в не булево значение, а затем использовать VAR=условие?result1: result2 (или сама переменная, если вы не хотите изменять, если условие false), в противном случае используйте if else.