2014-12-20 1 views
8

Ich versuche class.getSimpleName() für den Ausdruck eines Schalters zu verwenden, aber es ist mir ein Fehler gibt:Java switch-Anweisung mit class.getSimpleName() gibt Constant express erforderlich Fehler

Constant express required

I‘ Ich habe Antworten gesehen, die vorschlagen, die Ausdruck-Variablendeklarationen so zu ändern, dass sie Initialisierer haben, die kompilierungszeitkonstante Ausdrücke sind. Dies ist jedoch in diesem Fall nicht möglich.

Gibt es eine Möglichkeit, einen Wechsel mit class.getSimpleName() durchzuführen, ohne die Klassennamen fest codieren zu müssen?

Beispielcode

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 Dies ist kein Problem mit dem Wert, auf den Sie wechseln, aber der Fall Werte selbst. –

+0

@Eran Ja, ich benutze Java 7. – fahmy

Antwort

9

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

Nr Grundsätzlich zählt Class.getSimpleName() Aufruf nicht als Übersetzungszeit konstanter Ausdruck, so dass es nicht als Fall-Anweisung verwendet werden kann. Es wäre nett, wenn es einen nameof(...) Operator geben würde, wie es in C# 6 sein wird, aber ohne das, glaube ich nicht, dass Sie in der Lage sein werden, einen Schalter/Fall zu verwenden, ohne die Namen hart zu kodieren.