Mapa zawierająca String oraz Object/Void?

Mapa zawierająca String oraz Object/Void?
Tacoo
  • Rejestracja:ponad 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:28
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:

Kopiuj
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:

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

Oraz:

Kopiuj
Map<String, Object> codes = Map.of(
                    "SQL", CodeSQL(),
                    "Login", CodeLogin(),
                    "Communicate", CodeCommunicate(),
                    "AddFlight", CodeAddFlight(),
                    "CheckFlight", CodeCheckFlight(),
                    "FinishedFlight", CodeFinishedFlights()
            );
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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

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

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 2x, ostatnio: Shalom
Tacoo
Dziękuję :)
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:4 minuty
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4708
4
Kopiuj
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

jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
Zobacz pozostałe 7 komentarzy
AK
a zaraz tzreba poszerzać o podanie argumentów, danych kontekstu itd ... ja bym użył interface z jedną metodą czy klasę ... klasyczną, zupełnie nie- funkcyjną
Shalom
catch (NullPointerException ex) bój ty się Boga człowieku.
p_agon
NPE to jest "run-time exception".
AK
Mam wrażenie, ze religijna inwokacja miała inny sens

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.