使用class.getSimpleName()的Java switch语句给出了Constant express所需的错误

fah*_*hmy 11 java switch-statement

我正在尝试使用class.getSimpleName()作为交换机的表达式,但它给了我一个错误:

需要恒定快递

我已经看到答案建议将表达式变量声明更改为具有编译时常量表达式的初始化器.但是,在这种情况下这是不可能的.

有没有办法使用class.getSimpleName()进行切换而不必对类名进行硬编码?

示例代码

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;
 }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 11

有没有办法使用class.getSimpleName()进行切换而不必对类名进行硬编码?

不.基本上,调用Class.getSimpleName()不算作编译时常量表达式,因此不能用作case语句.如果nameof(...)在C#6中有一个操作员会很好,但如果没有它,我认为你不能使用没有硬编码名称的开关/案例.