gpt4 book ai didi

java - switch 语句中用于案例选择的常量映射?

转载 作者:行者123 更新时间:2023-11-29 06:31:10 25 4
gpt4 key购买 nike

有没有办法定义常量 Map 以便在 switch 语句中使用?我对来自 here 的静态 map 的所有试验, here而其他人则没有成功。为什么 Map 不是常量?

对于行 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 标签必须是常量表达式或枚举数。

对您的 map 的引用是最终的,并且您的 map 是不可修改的。但后者是在运行时强制执行的。编译器不会将该对象视为常量。

来自Java Language Specification, 14.11: The switch statement :

SwitchLabel:
case ConstantExpression :
case EnumConstantName :
default :

常量表达式只能由原始和字符串字面量、某些没有副作用的运算符、常量变量和一些可以在编译时计算的其他组件组成。 (常量变量是原始类型或字符串类型的 final 变量,已初始化为常量表达式。)更多详细信息在 15.28: Constant expressions。 .

关于java - switch 语句中用于案例选择的常量映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33550047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com