Sobes.tech
Junior

Co byś zrobił, gdyby podczas wywoływania metody A wystąpił wyjątek?

sobes.tech AI

Odpowiedź od AI

W zależności od typu wyjątku i logiki biznesowej:

  1. Obsługa wyjątku (try-catch): Przechwycić wyjątek w bloku catch i wykonać odpowiednią logikę:

    • Zalogować błąd.
    • Wyświetlić wiadomość użytkownikowi.
    • Spróbować się odzyskać lub kontynuować pracę (np. dostarczając wartość domyślną).
    • Przekształcić wyjątek w inny, bardziej odpowiedni (z Checked na Unchecked lub odwrotnie).
    try {
        methodA();
    } catch (SpecificException e) {
        // Logujemy błąd
        logger.error("Błąd podczas wywoływania methodA", e);
        // Możemy wyświetlić wiadomość użytkownikowi
        // displayErrorMessage("Wystąpił błąd");
        // Lub spróbować się odzyskać
        // handleRecoveryLogic();
    } catch (AnotherException e) {
        // Obsługa innego typu wyjątku
    } finally {
        // Kod, który wykona się w każdym przypadku (zwalnianie zasobów)
        // closeResource();
    }
    
  2. Przekazywanie wyjątku (throws): Jeśli metoda A nie może obsłużyć wyjątku sama, przekazuje go do metody wywołującej za pomocą słowa kluczowego throws. Metoda ta musi go obsłużyć lub przekazać dalej.

    public void methodB() throws SpecificException {
        methodA(); // methodA może rzucić SpecificException
    }
    

    Dotyczy to, gdy wyjątek wymaga obsługi na wyższym poziomie abstrakcji.

  3. Ignorowanie wyjątku (niezalecane): Przechwycić wyjątek i nic nie robić. To zła praktyka, ponieważ ukrywa błędy i utrudnia debugowanie. Rzadko uzasadnione dla nieznaczących wyjątków, które nie wpływają na działanie.

    try {
        methodA();
    } catch (Exception e) {
        // Zignorować... bardzo zły pomysł w większości przypadków
    }
    
  4. Przerwanie wykonania: Jeśli wyjątek jest krytyczny i dalsza praca jest niemożliwa, można pozwolić mu się rozprzestrzenić lub jawnie rzucić nowy wyjątek, np. RuntimeException, jeśli trzeba zatrzymać przepływ wykonania.

Wybór zależy od kontekstu, typu wyjątku (Checked vs Unchecked) i polityki obsługi błędów w aplikacji. Ważne, aby obsługa wyjątków była spójna i dostarczała wystarczających informacji do debugowania.