2014-01-19 3 views
9

Есть ли способ реализовать это в тройной операции. Я очень новичок в этом трояном, может быть, ты сможешь вести меня.Тернарные операторы Java

if(selection.toLowerCase().equals("produkt")) 
    cmdCse.setVisible(true); 
else 
    cmdCse.setVisible(false); 

Этот, похоже, не работает.

selection.toLowerCase().equals("produkt")?cmdCse.setVisible(true):cmdCse.setVisible(false); 
+1

'selection.toLowerCase(). Equals (" produkt ")' оценивается как 'true' или' false', что очень похоже на значения, которые вы передаете 'setVisible()' ... –

+0

Почему? Это менее читаемо, а иногда и не очевидно, чтобы строить (например ... здесь и для вас). Нет необходимости принудительно использовать его, когда нет преимуществ (если вы не собираетесь играть в гольф для кодов, но это не слишком хорошо для вашего стиля). –

ответ

15

В этом случае вам не нужно даже тройной оператор:

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) к wow, в зависимости от состояния.

My 2cents: используйте тернарный оператор только тогда, когда он делает вашу программу более четкой, иначе вы получите некоторые неразборчивые однострочные.

+0

Вы правы, он тоже должен быть читаемым –

8

Возможно

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

Я думаю, что это будет работать для вас

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

Тройная оператор не в точности, как если заявление. Тернарный оператор должен «возвращать» что-то с обеих сторон, поэтому посылка вызовов типа void, таких как setVisible(), не будет работать.

Вместо этого вы могли бы сделать что-то вроде этого, не тройные операторов на всех:

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

Но только чтобы продемонстрировать точку, тройная эквивалент будет выглядеть примерно так:

cmdCse.setVisible(selection.toLowerCase().equals("product") ? true : false); 

Обратите внимание, как теперь тернарный оператор «возвращает» true или false с обеих сторон вместо простого вызова метода void.

1

Непосредственно from the docs

Используйте оператор: вместо если-то-другое заявление, если это делает ваш код более читаемым;? например, когда выражения компактны и без побочных эффектов (например, присвоений).

В вашем случае cmdCse.setVisible(true/false); не возвращает ничего, и операция также имеет побочные эффекты (он изменяет состояние cmdCse), поэтому условный оператор не может быть использован здесь (если вы используете оператор, оба из ? и : ветви должны иметь одинаковый тип возврата).

Как и в сторону, обратите внимание, что .. ? .. : .. следует называют conditional operator

+1

спасибо за вашу информацию –

0

Вот мои советы, если вам необходимо установить вещи булевы, то простое использование setBoolean (состояние), в противном случае, если вам нужно чтобы установить переменную в небулево значение, затем используйте var = condition? result1: result2 (или сама переменная, если вы не хотите изменять, если условие ложно), в противном случае используйте if else.

Смежные вопросы