此代码引发错误
“需要常量表达式”,表示“ 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中的转换语句更加受限制。评论所暗示的是正确的-您的常数不够“常数”。它们可能是最终的,但是在程序启动时正在对其进行初始化。 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,并使用将输入映射到枚举常量的函数。
知道您要实现的目标很有趣,也许完全有另一种解决方案。