Operatori ternari Java

C’è un modo per implementarlo in un’operazione ternaria. Sono molto nuovo a quella roba ternaria, forse potresti guidarmi.

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

Questo sembra non funzionare.

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

In questo caso, non hai nemmeno bisogno di un operatore ternario:

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

Oppure, più pulito:

  cmdCse.setVisible(selection.equalsIgnoreCase("produkt")); 

La tua versione:

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

è semanticamente scorretto: l’ operatore ternario dovrebbe rappresentare assegnazioni alternative , non è un sostituto completo delle dichiarazioni if . Questo va bene:

 double wow = x > y? Math.sqrt(y): x; 

perché stai assegnando x o Math.sqrt(y) a wow , a seconda di una condizione .

I miei 2cents: usa l’operatore ternario solo quando rende più chiaro il tuo programma, altrimenti finirai per avere degli one-liner indecifrabili.

Forse

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

L’operatore ternario non è esattamente come un’istruzione if. Un operatore ternario deve “restituire” qualcosa da entrambi i lati, quindi mettere invalide chiamate di metodo come setVisible () non funzionerà.

Invece, si potrebbe fare qualcosa di simile senza operatori ternari:

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

Ma solo per dimostrare il punto, l’equivalente ternario sarebbe simile a questo:

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

Nota come ora l’operatore ternario “restituisce” vero o falso su entrambi i lati invece di chiamare semplicemente un metodo vuoto.

Penso che questo funzionerà per te

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

Direttamente dai documenti

Utilizzare l’operatore?: Invece di un’istruzione if-then-else se rende il codice più leggibile; ad esempio, quando le espressioni sono compatte e senza effetti collaterali (come i compiti).

Nel tuo caso cmdCse.setVisible(true / false); non restituisce nulla, e l’operazione ha anche effetti collaterali (cambia stato di cmdCse ), quindi l’operatore condizionale non può essere usato qui (quando si usa l’operatore, entrambi i rami ? e : devono avere lo stesso tipo di ritorno ).

Per inciso, per favore nota che .. ? .. : .. .. ? .. : .. dovrebbe essere indicato come l’ conditional operator

Ecco i miei consigli, se hai bisogno di impostare cose per i booleani, quindi usa setBoolean (condition), altrimenti, se hai bisogno di impostare una variabile su un valore non booleano, usa var = condition? Result1: result2 (o la variabile se non vuoi cambiare se la condizione è falsa), altrimenti, usa se non altro.