变量尚未在 Java 中初始化

Variable has not have been initialized in Java

以下代码无法编译,因为变量 'rt' 尚未初始化。

我希望代码在 switch 语句中初始化 'rt',或者当默认情况为 运行.

时不再使用 'rt'

这是我写的代码:

enum RequestType {leader, candidate};

private void processRequest(String input) {


        boolean inputOK = true;
        RequestType rt;

        String[] split = input.split(":");

        if (!input.contains(":")) {
             inputOK = false;
        }
        else {


            if (split.length != 3) {
                inputOK = false;
            }

            else {
                int port = Integer.parseInt(split[2]);

                if (!(port > 0 && port < 65537)) {
                    inputOK = false;

                }

                else {

                    switch (split[0]) {
                        case "Leader":
                            rt = RequestType.leader;
                            break;
                        case "Candidate":
                            rt = RequestType.candidate;
                            break;
                        default:
                            inputOK = false;
                    }

                }
            }
        }

        if (!inputOK) {
            return;
        }

        String address = split[1].concat(split[2]);

        if (rt == RequestType.leader) {

            keepingLeader(address);
        }

您没有在默认块或许多 ifs 中初始化 rt

编译器不会查看 rt 的读取相对于 inputOK 的值是否可达,它只查看它是否完全可达。

最简单的方法就是立即 return 您当前 inputOK = false;

或者,您可以在声明时为 rt 分配一个默认值,例如 null。问题是它破坏了编译器现在正在做的检查——你实际上已经在所有情况下都分配了它,所以你不会不小心使用默认值。

相反,您可以使用 rt 的无效性来代替单独的布尔值:

  • 在您当前分配 inputOK = false 的位置,改为分配 rt = null
  • 然后检查 !inputOK 和 return 如果为真,请检查 rt == null