Тернарные Операторы 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: используйте троичный оператор только тогда, когда он делает вашу программу более ясной, иначе у вас будут неразборчивые однострочные.


возможно

cmdCse.setVisible(selection.toLowerCase().equals("produkt"));

тернарный оператор не совсем похож на Оператор 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.