Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Variable has not have been initialized in Java

The following code fails to compile as the variable ‘rt’ has not been initialized.

I’m wanting the code to either initialize ‘rt’ in the switch-Statement, or not use ‘rt’ anymore when the default case is ran.

Here is the code I’ve written:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

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);
        }

>Solution :

You don’t initialize rt in the default block, or many of the ifs.

The compiler doesn’t look at whether the read of rt is reachable with respect to the value of inputOK, it just looks at whether it is reachable at all.

The easiest thing to do is just to return immediately where you currently have inputOK = false;.

Alternatively, you can assign a default value to rt, for example null, when you declare it. The problem with that is it breaks the checking that the compiler is doing now – that you actually have assigned it in all circumstances, so you don’t accidentally use the default value.

Instead, you can use the nullity of rt instead of having a separate boolean value:

  • Where you currently assign inputOK = false, assign rt = null instead;
  • Where you then check !inputOK and return if true, check rt == null instead.
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading