2014-12-20 12 views
8

Sto cercando di utilizzare class.getSimpleName() per l'espressione di un interruttore però mi dà un errore:Java istruzione switch utilizzando class.getSimpleName() dà costante espressa richiesta errore

Constant express required

I' Ho visto risposte che suggeriscono di cambiare le dichiarazioni delle variabili di espressione per avere degli inizializzatori che sono espressioni costanti in fase di compilazione. Tuttavia, questo non è possibile in questo caso.

C'è un modo per effettuare uno switch utilizzando class.getSimpleName() senza dover codificare i nomi delle classi?

codice Esempio

public class ClassA { 
    public static final String TAG = ClassA.class.getSimpleName(); 
    ... 
} 

public class ClassB { 
    public static final String TAG = ClassB.class.getSimpleName(); 
    ... 
} 

public class SomeOtherClass { 
    switch (express) { 
    case ClassA.TAG: // Error here 
     ... 
     break; 
    case ClassB.TAG: // and here 
     ... 
     break; 
    default: 
     ... 
     break; 
} 
+0

@Eran Questo non è un problema con il valore su cui si cambia, ma i valori dei casi stessi. –

+0

@Eran Sì, sto usando java 7. – fahmy

risposta

9

Is there a way to make a switch using class.getSimpleName() without having to hardcode the class names?

No. Fondamentalmente, chiamando Class.getSimpleName() non conta come fase di compilazione espressione costante, quindi non può essere utilizzato come istruzione caso. Sarebbe bello se ci fosse un operatore nameof(...) come ci sarà in C# 6, ma senza di esso, non credo che sarete in grado di utilizzare un interruttore/caso senza codificare i nomi.

Problemi correlati