2012-02-26 19 views
38

Mi chiedevo se fosse possibile eseguire un'operazione ternaria ma senza restituire nulla.Java: ternario senza restituzione. (Per la chiamata al metodo)

Se non è possibile in Java è possibile in altre lingue, in tal caso quali sono applicabili?

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

E 'possibile in JavaScript, per esempio qui: http://stackoverflow.com/a/6260001/320399 – blong

risposta

40

No, non è possibile. Ma qual è il punto su questo una dichiarazione if-else? Stai davvero cercando di salvare 7 personaggi?

if (name.isChecked()) { 
    name.setChecked(true); 
} else { 
    name.setChecked(false); 
} 

o se si preferisce cattivo stile:

if (name.isChecked()) name.setChecked(true); else name.setChecked(false); 

Non importa il fatto che si può solo fare (in questo caso):

name.setChecked(name.isChecked()); 

Il punto del ternario o " L'operatore "condizionale" introduce i condizionali in un'espressione . In altre parole, questo:

int max = a > b ? a : b; 

è destinato ad essere scorciatoia per questo:

int max; 
if (a > b) { 
    max = a; 
} else { 
    max = b; 
} 

Se non c'è alcun valore prodotta, l'operatore condizionale non è un collegamento.

0

in Java seguente codice non possibile:

(your-condition) ? (true-statements) : (false-statements) 

per il campione non è possibile compilare seguente pezzo di codice presentato:

(1==1) ? System.out.println("") : System.out.println(""); 

si raggiungere seguente errore di compilazione:

The left-hand side of an assignment must be a variable 
+0

'(your-condizione)? (true-statements): (false dichiarazioni) 'è possibile in java ma deve restituire un valore (non può essere vuoto) e devi assegnarlo a una variabile. – jalv1039

5

A volte, è possibile utilizzare l'operazione ternaria sugli argomenti del metodo per risolvere la richiesta.

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

dal modo in cui la soluzione migliore per il tuo peoblem è

name.setCecked(name:isChecked()); 
10

I was wondering if it was possible to do a ternary operation but without returning anything.

No, non è possibile:

  1. Il 2 ° e 3 ° operandi sono tenuti ad essere non -evitare espressioni; cioè devono produrre un valore reale.

    "It is a compile-time error for either the second or the third operand expression to be an invocation of a void method." - JLS 15.25 .

  2. Un'espressione ternario è espressione, e non può essere utilizzato come una dichiarazione.

    "Certain kinds of expressions may be used as statements by following them with semicolons." ... and the ternary expression is not one of those kinds - JLS 14.8 .

Se davvero, davvero vuole usare un espressione ternaria, ma non utilizzare il valore dell'espressione, quindi la cosa più semplice è quello di assegnare il valore di una variabile dummy, e aggiungere un'annotazione di sopprimere l'avviso sulla variabile non utilizzata.

Ma un'idea migliore è utilizzare una semplice istruzione if.

If it's not possible in Java is it possible in other languages, if so which ones apply?

Sono un po 'arrugginito, ma credo che C, C++ e Perl tutti permettono espressioni arbitrarie da utilizzare in luoghi dove non si usano i loro valori.

0

È necessario restituire un valore e non funzionerà se si desidera che funzioni come un metodo di annullamento che esegue un'azione senza restituire un valore.

Spero che questo aiuti ...

+0

Questa domanda ha già una risposta. Per favore, [leggi le FAQ per sapere come fare domande correttamente] (http://stackoverflow.com/help/how-to-ask). – zuazo

Problemi correlati