2011-01-31 3 views
5

In un caso di commutazione, ho notato che quando provo a usare un parametro come costante del caso, ottengo un errore di compilazione. Ma posso usare campi/vars locali.In Java, è possibile utilizzare un parametro metodo/costruttore come un'istruzione switch, costante del caso?

È davvero impossibile utilizzare un parametro come costante di caso? O ci sono eccezioni (se sì, si prega di fornire un esempio)?

Esempio:

final int field = 0; 
void method(final int parameter) { 
    switch(3) { 
     case field: // ALLOWED 
     case parameter; // NOT ALLOWED 
    } 
} 

Sto cercando di utilizzare direttamente il parametro. Non sono interessato alle soluzioni che salvano il valore del parametro in una var locale.

risposta

3

Proprio come C e C++, Java permette solo fase di compilazione costanti come un valore per case.

Il valore di inizializzatofinal membri di classe può essere determinato in fase di compilazione e non può essere modificato. I parametri del metodo final possono avere un valore diverso per ogni chiamata di metodo.

Per confrontare con i parametri del metodo, è probabile che si debba ricorrere al buon vecchio if...else....

EDIT:

A proposito, notare l'accento sulla inizializzati sopra. Un membro della classe final senza un inizializzatore della dichiarazione non può essere utilizzato come valore case.

2

Java possono utilizzare solo costanti nella case parte