Java开关:大小写表达式必须是常量表达式

Java开关:大小写表达式必须是常量表达式,java,switch-statement,Java,Switch Statement,我的学校项目中的java switch有问题:在代码中,case中的所有常量都带红色下划线,并抛出case错误 private static final int TCP = Integer.parseInt(PropertiesComunicator.getData("tcp")); private static final int HTTP = Integer.parseInt(PropertiesComunicator.getData("http")); private static fin

我的学校项目中的java switch有问题:在代码中,case中的所有常量都带红色下划线,并抛出case错误

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语句只能获取编译时常量,或enum”,而我的常量值是从extern属性文件中获取的,所以我认为这就是发生这个错误的原因,但通过extern文件配置这个常量是完成我的项目的必要条件:(除了重新编码这个部分的od源代码之外,还有什么解决方案吗


另外,这几个端口不是我必须分析的唯一端口…

这里的典型方法是使用某种映射/字典将您的输入“键”(在您的情况下,
portNumbers[i]
)映射到它们的“值”(例如,将HTTP映射到“HTTP”)

你可以

Map<Integer, String> protos = new HashMap<Integer, String>();
protos.put(HTTP, "http");

你需要一个
Map
在这里。Map是不可能的,它应该是Map非常感谢你,我认为hash-Map可以解决这个问题,最好用它来代替od-switch
portNames[i] = protos.get(portNumber[i]);