rae*_*dma 1 java dictionary switch-statement
有没有办法Map在switch语句中定义一个常量?我在这里,这里和其他地方使用静态地图的所有试验都没有成功.为什么地图不是常数?
对于线路case (kws.get(KEYWORD_NAME)):我总是得到constant string expression required错误.
public class Demo {
  public static final String KEYWORD_NAME = "Name";
  public static final String KEYWORD_TYPE = "Type";
  private static final Map<String, String> kws = Collections.unmodifiableMap(
  new HashMap<String, String>() {{
    put(KEYWORD_NAME, KEYWORD_NAME.toLowerCase());
    put(KEYWORD_TYPE, KEYWORD_TYPE.toLowerCase());
  }});
  public static void parse(String kw){
    switch(kw){
      case (kws.get(KEYWORD_NAME)):
        System.out.println("Test");
        break;
    default:
      System.out.println("Unknown");
    }
  }
}
不,因为switch语句中的case标签必须是常量表达式或枚举器.
对地图的引用是final,您的地图是不可修改的.但后者是在运行时强制执行的.编译器不会将对象视为常量.
SwitchLabel:
case ConstantExpression : 
case EnumConstantName : 
default :
常量表达式只能由原始字符串和字符串文字组成,某些运算符没有副作用,常量变量以及一些可以在编译时计算的其他组件.(常量变量是final已初始化为常量表达式的原语或字符串类型的变量.)更多细节位于15.28:常量表达式.
| 归档时间: | 
 | 
| 查看次数: | 368 次 | 
| 最近记录: |