我正在尝试将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;
 }

最佳答案



不会。基本上,调用Class.getSimpleName()不会算作编译时常量表达式,因此不能用作case语句。如果在C#6中有一个nameof(...)运算符,那将是很好的选择,但是如果没有这个运算符,我想您将无法在不对名称进行硬编码的情况下使用开关/大小写。

10-06 01:26