Sobes.tech
Junior

Πώς θα πετάγατε εξαιρέσεις πιο πάνω στη στοίβα κλήσεων;

sobes.tech AI

Απάντηση από AI

Χρησιμοποιώ τη λέξη-κλειδί throw για να επαναφέρω ή να δημιουργήσω μια νέα εξαίρεση.

public void method1() throws CustomException {
    try {
        // Κάποιος κώδικας που μπορεί να ρίξει AnotherException
        method2();
    } catch (AnotherException e) {
        // Συλλέγουμε το AnotherException
        // Το τυλίγουμε σε CustomException και το ρίχνουμε προς τα πάνω
        throw new CustomException("Σφάλμα στο Method2: " + e.getMessage(), e);
    }
}

public void method2() throws AnotherException {
    // Κάποιος κώδικας που μπορεί να ρίξει μια εξαίρεση
    throw new AnotherException("Κάτι πήγε στραβά στο Method2");
}

class CustomException extends Exception {
    public CustomException(String message, Throwable cause) {
        super(message, cause);
    }
}

class AnotherException extends Exception {
    public AnotherException(String message) {
        super(message);
    }
}

Ή, αν απλά θέλετε να επαναφέρετε την捕获μένη εξαίρεση χωρίς να δημιουργήσετε μια νέα:

public void methodA() throws SomeException {
    try {
        methodB();
    } catch (SomeException e) {
        // Καταγραφή ή άλλες ενέργειες
        // Επαναφέρετε την ίδια εξαίρεση προς τα πάνω
        throw e;
    }
}

public void methodB() throws SomeException {
    // Κώδικας που μπορεί να ρίξει SomeException
    throw new SomeException("Σφάλμα στο MethodB");
}

class SomeException extends Exception {
    public SomeException(String message) {
        super(message);
    }
}