Java switch case 表示最终字段为 "Constant expression required"
Java swith case says "Constant expression required" for final field
此代码引发错误
"Constant expression required" ponting to "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();
}
这对于 switch 语句是不可能的。 Java 中的 switch 语句比大多数人知道的更受限制。评论所暗示的是真实的——你的常量不是 "constant enough"。
它们可能是最终的,但它们在程序启动时被初始化。 Java 要求开关标签在编译时已知。
最简单的解决方案是使用 if-else-if,我会直接使用 class 进行比较,而不是明智地比较名称字符:
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
}
如果您"need"要使用开关,则必须使用您的常量定义一个枚举,以及一个将您的输入映射到枚举常量的函数。
知道你想要达到的目标会很有趣,也许完全有另一种解决方案。
此代码引发错误
"Constant expression required" ponting to "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();
}
这对于 switch 语句是不可能的。 Java 中的 switch 语句比大多数人知道的更受限制。评论所暗示的是真实的——你的常量不是 "constant enough"。 它们可能是最终的,但它们在程序启动时被初始化。 Java 要求开关标签在编译时已知。
最简单的解决方案是使用 if-else-if,我会直接使用 class 进行比较,而不是明智地比较名称字符:
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
}
如果您"need"要使用开关,则必须使用您的常量定义一个枚举,以及一个将您的输入映射到枚举常量的函数。
知道你想要达到的目标会很有趣,也许完全有另一种解决方案。