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

2022-09-04 21:39:51

我试图使用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;
 }

答案 1

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

哈哈基本上,调用不算作编译时常量表达式,因此它不能用作 case 语句。如果有一个运算符会很好,就像C#6中一样,但是如果没有它,我认为你不能在不硬编码名称的情况下使用开关/大小写。Class.getSimpleName()nameof(...)


答案 2