Java swith例对于最终字段说“需要常量表达式”

问题描述 投票:0回答:1

此代码引发错误

“需要常量表达式”,表示“ INTEGER_CLASS_STRING”。

它是一个最终变量,尽管它是一个常数。为什么会出现此错误?

下面的我的代码:

private static final String INTEGER_CLASS_STRING = Integer.class.toString();
private static final String DOUBLE_CLASS_STRING = Double.class.toString();

 switch (definition.get(correctKey).getClass().toString()){
    case INTEGER_CLASS_STRING: System.out.println();
    case DOUBLE_CLASS_STRING: System.out.println();
 }
java switch-statement final
1个回答
0
投票

这在开关状态下是不可能的。大多数人都知道,Java中的转换语句更加受限制。评论所暗示的是正确的-您的常数不够“常数”。它们可能是最终的,但是在程序启动时正在对其进行初始化。 Java要求在编译时知道switch标签。

最简单的解决方案是使用if-else-if,我将直接使用该类进行比较,而不是明智地比较名称的字符:

Class<?> def = definition.get(correctKey).getClass();
if (Integer.class.equals(def)) {
  // your code
} else if (Double.class.equals(def)) {
  // double code
} else {
  // Error, not found
}

如果“需要”使用开关,则必须使用常量定义一个Enum,并使用将输入映射到枚举常量的函数。

知道您要实现的目标很有趣,也许完全有另一种解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.