Бросать исключение из переменной - PullRequest
0 голосов
/ 08 октября 2018

Используя java, я хочу сделать что-то вроде

try {
  someMethod();
} catch (Throwable x) {
  x.setMessage("Some comment " + x.getMessage());
  throw x;
}

То есть я не знаю, что выкинет "someMethod".Что бы это ни было, я хочу добавить сообщение в начале его сообщения, а затем выбросить ошибку.Но Throwable не имеет метода setMessage ().

Я могу сделать Class<? extends Throwable> cls = x.getClass();, чтобы получить тип класса, но я не уверен в синтаксисе.Я не могу сделать throw new cls("Comment " + x.getMessage()); Я уверен, что должен быть довольно простой способ сделать это, если вы не знаете класс броска.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Вы можете просто поймать Exception, брошенный someMethod(), а затем повторно выбросить его с нужным вам сообщением.

Что-то вроде,

try {
   someMethod();
} catch(Exception ex) {
   /* Optional: Log Error */
   Logger.error(..., ex);
   throw new Exception("Error Occurred While Processing Request.", ex);
}

Если вы хотите, чтобы выТакже можно создать и выбросить проверенное исключение следующим образом:

Класс CustomException:

public class CustomException extends Exception {
    /* Optional: Add Serial UID */

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

    public CustomException(Throwable cause) {
        super(cause);
    }
}

Код:

try {
   someMethod();
} catch(Exception ex) {
   /* Optional: Log Error */
   Logger.error(..., ex);
   throw new CustomException("Error Occurred While Processing Request.", ex);
}
0 голосов
/ 08 октября 2018

Вместо того, чтобы отлавливать Throwable (что почти всегда ошибка), вы можете создать пользовательский RuntimeException и заключить в него пойманное исключение.

public class MyException extends RuntimeException {
    public MyException(String message, Throwable cause) {
        super(message, cause);
    }
}

try {
    someMethod();
} catch(Exception e) {
    throw new MyException("A major error has occurred!", e);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...