Mapa zawierająca String oraz Object/Void?

0

Cześć, piszę projekt na studia z Javy i przyjmuję kody które następnie przekierowują klienta do danej metody.
Chciałbym zastąpić drabinkę IF, myślałem o mapie ale nie jest ona w stanie przyjąć wartości String oraz Object/Void.

Mój kod:

public void run() {

        try {
            DataInputStream disCode = new DataInputStream(socket.getInputStream());
            String code = disCode.readUTF();
            System.out.println("Serwer: Odebrałem kod: " + code);


            if (code.equals("SQL")) {
                CodeSQL();
            }

            if (code.equals("Login")) {
                CodeLogin();
            }

            if (code.equals("Communicate")) {
                CodeCommunicate();
            }

            if (code.equals("AddFlight")) {
                CodeAddFlight();
            }

            if (code.equals("CheckFlight")) {
                CodeCheckFlight();
            }

            if(code.equals("FinishedFlights")){
                CompletedFlights();
            }

            else {
                System.out.println("Serwer: Błędny kod!");
                run();
            }



        } catch (IOException e) {
            e.printStackTrace();
        }
    }

Próbowałem:

Map<String, Void> codes = Map.of(
                    "SQL", CodeSQL(),
                    "Login", CodeLogin(),
                    "Communicate", CodeCommunicate(),
                    "AddFlight", CodeAddFlight(),
                    "CheckFlight", CodeCheckFlight(),
                    "FinishedFlight", CodeFinishedFlights()
            );

Oraz:

Map<String, Object> codes = Map.of(
                    "SQL", CodeSQL(),
                    "Login", CodeLogin(),
                    "Communicate", CodeCommunicate(),
                    "AddFlight", CodeAddFlight(),
                    "CheckFlight", CodeCheckFlight(),
                    "FinishedFlight", CodeFinishedFlights()
            );
3

A co to niby jest void? o_O Tu panie chcesz mieć w tej mapie FUNKCJE przecież! Więc np. jakieś Callable<T> jeśli mają coś zwracać albo Runnable jeśli nie. To co teraz zrobiłeś nie ma sensu bo WYWOŁASZ te swoje funkcje od razu tworząc mapę, a rozumiem że chcesz je zawołać dopiero jak jakis warunek jest spełniony.
Zrób Map<String,Runnable> i masz

Map<String, Runnable> codes = Map.of(
                    "SQL", ()->CodeSQL(),
                    "Login", ()->CodeLogin(),
                    "Communicate", ()->CodeCommunicate(),
                    "AddFlight", ()->CodeAddFlight(),
                    "CheckFlight", ()->CodeCheckFlight(),
                    "FinishedFlight", ()->CodeFinishedFlights()
            );
4
Map<String, Runnable> codes = Map.of(
                    "SQL", ()->CodeSQL(),
                    "Login", ()->CodeLogin(),
                    "Communicate", ()->CodeCommunicate(),
               ...
            );
[...]
codes.get(code).run(); //jeszcze nulla z get trzeba obsłużyć ale to ćwiczenie dla Ciebie

1 użytkowników online, w tym zalogowanych: 0, gości: 1