我的学校项目中的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语句只能采用编译时常量或枚举”,而我的常量值取自extern属性文件所以我认为这就是为什么这个错误发生,但extern文件配置这个常量是完成我的项目的必要条件:(有没有任何解决方案除了不舒服if-else重新编码这部分od源?
P.S。这几个端口不是我唯一要分析的......
答案 0 :(得分:0)
portNumbers[i]
)映射到它们的“值”(例如将HTTP映射到“http”)。 / p>
你可以做到
Map<Integer, String> protos = new HashMap<Integer, String>();
protos.put(HTTP, "http");
并使用
解决所有问题portNames[i] = protos.get(portNumber[i]);