Java switch : case 表达式必须是常量表达式
Java switch : case expressions must be constant expressions
我的学校项目中的 java 开关有问题:在代码中,所有情况下的常量都带有红色下划线并抛出该情况错误
private static final int TCP = Integer.parseInt(PropertiesComunicator.getData("tcp"));
private static final int HTTP = Integer.parseInt(PropertiesComunicator.getData("http"));
private static final int HTTPS = Integer.parseInt(PropertiesComunicator.getData("https"));
private static final int TELNET = Integer.parseInt(PropertiesComunicator.getData("telnet"));
private static final int SSH = Integer.parseInt(PropertiesComunicator.getData("ssh"));
private static final int FTP_DATA = Integer.parseInt(PropertiesComunicator.getData("ftp-data"));
private static final int FTP_CONTROL = Integer.parseInt(PropertiesComunicator.getData("ftp-control"));
switch (portNumbers[i]) {
case HTTP:
portNames[i] = "http";
break;
case HTTPS:
portNames[i] = "https";
break;
case TELNET:
portNames[i] = "telnet";
break;
case SSH:
portNames[i] = "ssh";
break;
case FTP_DATA:
portNames[i] = "ftp-data";
break;
case FTP_CONTROL:
portNames[i] = "ftp-control";
break;
default:
portNames[i] = null;
break;
}
在互联网上快速研究后,我发现这个错误是因为 "case statements can only take compile-time constants, or enums" 和我的常量值是从外部 属性 文件中获取的,所以我认为这就是发生这个错误的原因,但是通过外部文件配置这个常量是完成我的项目的必要条件:( 除了不舒服的 if-else 重新编码这部分 od 源之外,还有什么解决方案吗?
P.S。这几个端口不是我唯一要分析的...
g这里的典型方法是使用某种类型的 map/dictionary 将您的输入 "keys"(在您的情况下为 portNumbers[i]
)映射到他们的 "value"(例如映射HTTP 到 "http").
你可以
Map<Integer, String> protos = new HashMap<Integer, String>();
protos.put(HTTP, "http");
并使用
解决所有问题
portNames[i] = protos.get(portNumber[i]);
我的学校项目中的 java 开关有问题:在代码中,所有情况下的常量都带有红色下划线并抛出该情况错误
private static final int TCP = Integer.parseInt(PropertiesComunicator.getData("tcp"));
private static final int HTTP = Integer.parseInt(PropertiesComunicator.getData("http"));
private static final int HTTPS = Integer.parseInt(PropertiesComunicator.getData("https"));
private static final int TELNET = Integer.parseInt(PropertiesComunicator.getData("telnet"));
private static final int SSH = Integer.parseInt(PropertiesComunicator.getData("ssh"));
private static final int FTP_DATA = Integer.parseInt(PropertiesComunicator.getData("ftp-data"));
private static final int FTP_CONTROL = Integer.parseInt(PropertiesComunicator.getData("ftp-control"));
switch (portNumbers[i]) {
case HTTP:
portNames[i] = "http";
break;
case HTTPS:
portNames[i] = "https";
break;
case TELNET:
portNames[i] = "telnet";
break;
case SSH:
portNames[i] = "ssh";
break;
case FTP_DATA:
portNames[i] = "ftp-data";
break;
case FTP_CONTROL:
portNames[i] = "ftp-control";
break;
default:
portNames[i] = null;
break;
}
在互联网上快速研究后,我发现这个错误是因为 "case statements can only take compile-time constants, or enums" 和我的常量值是从外部 属性 文件中获取的,所以我认为这就是发生这个错误的原因,但是通过外部文件配置这个常量是完成我的项目的必要条件:( 除了不舒服的 if-else 重新编码这部分 od 源之外,还有什么解决方案吗?
P.S。这几个端口不是我唯一要分析的...
g这里的典型方法是使用某种类型的 map/dictionary 将您的输入 "keys"(在您的情况下为 portNumbers[i]
)映射到他们的 "value"(例如映射HTTP 到 "http").
你可以
Map<Integer, String> protos = new HashMap<Integer, String>();
protos.put(HTTP, "http");
并使用
解决所有问题portNames[i] = protos.get(portNumber[i]);