2012-09-28 13 views
13

Sto tentando di utilizzare? per decidere quale metodo voglio chiamare, ma non ho bisogno di assegnare una variabile. La mia domanda: esiste un modo per utilizzare l'operatore ternario senza assegnare una variabile?JAVA chiama un metodo utilizzando un operatore ternario

(something i dont need) = (x == 1)? doThisMethod():doThatMethod() 

anziché

if(x == 1) { 
    doThisMethod() 
} else { 
    doThatMethod() 
} 
+0

Avete semplicemente provato con i metodi 'void' e nessun target di assegnazione? (Non l'ho mai fatto, ma non è chiaro che non funzionerebbe.) –

+1

scusate la mia risposta era sbagliata: non si può usare l'operatore ternario come un'istruzione solitaria in java; si _can_ in C. – pb2q

risposta

15

Questo non funziona, in quanto non è previsto l'uso dell'operatore ternario.

Se si vuole veramente che sia la linea 1, si può scrivere:

if (x==1) doThisMethod(); else doThatMethod(); 
+0

Questo ha funzionato. e grazie per la conoscenza. Voglio che sia facile da seguire per gli altri. –

+1

-1: completamente sbagliato. Questo non ha nulla a che fare con il tipo di ritorno del metodo. Cambiare i metodi per restituire (say) 'int' o' Object' non risolverebbe l'errore di sintassi. – ruakh

+0

@ruakh, la domanda che ho posto è fondamentalmente in grado di rendere l'operatore ternario fondamentalmente un vuoto in modo da non dover assegnare una variabile. per la domanda che tengo, questa è la migliore risposta. (perché, in realtà non avevo bisogno dell'operatore ternario, solo un "altro", quindi se qualcuno ottiene il -1 è me. –

5

dubito che questo funziona. Il JLS §15.25 definisce l'espressione ternaria come segue:

ConditionalExpression: 
    ConditionalOrExpression 
    ConditionalOrExpression ? Expression : ConditionalExpression 

E un ConditionalExpression non è un Statement per sé. Può essere utilizzato in vari altri luoghi, tuttavia, ad es. un Assignment:

AssignmentExpression: 
    ConditionalExpression 
    Assignment 

Assignment: 
    LeftHandSide AssignmentOperator AssignmentExpression 
-4

Molto più diversificato, se il flusso doveva interrompersi dopo il metodo call.questo può essere utilizzato, ma una parola di cautela se il flusso non si interrompe dopo il se entrambi i metodi verranno eseguiti.

if (x==1) 
doThisMethod(); 
doThatMethod(); 
+0

Questo chiamerà 'doThatMethod();' sempre, non importa quale sia x. – hinneLinks

+0

@hinneLinks ha reso un po 'più prolisso, mi dispiace per la confusione –

+0

Se intendi "return doThisMethod();" allora dovresti scriverlo. Se vuoi dire che ti affidi a 'doThisMethod()' per lanciare un'eccezione per evitare la chiamata di 'doThatMethod();' questo sarebbe uno stile di codice molto brutto, nessuno se lo aspetterebbe. – hinneLinks