Как отловить исключение в Java? - PullRequest
0 голосов
/ 06 июня 2018

Я получаю следующее исключение в своем коде и хочу перехватить внутреннее исключение.Можно ли это уловить?

java.lang.RuntimeException: error
some stack trace
some stack trace
some stack trace
! Caused by: java.util.concurrent.TimeoutException: null
some stack trace
some stack trace
some stack trace

Допустим, у меня есть следующий код.

function abc() {
  try{
    xyz()
  } catch (TimeoutException e) {
     do stuff
  }
}

Функция xyz () генерирует это исключение.Будет ли перехватывать TimeoutException, как эта работа?

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Нет, вы не можете поймать RuntimeException с catch(TimeoutException e).

Однако вы можете сделать

} catch (RuntimeException e) {
  Throwable cause = e.getCause(); 
}

, чтобы получить причину.

0 голосов
/ 06 июня 2018

Вы не можете напрямую поймать RuntimeException, вызванное TimeoutException.

Но вы достигаете этого следующим образом:

    try {
        xyz();
    } catch (RuntimeException e) {
        if (e.getCause() instanceof TimeoutException) {
            // handle TimeoutException
            doStuff();
        } else {
            // rethrow all exceptions with other causes
            throw e;
        }
    }
0 голосов
/ 06 июня 2018

Вы не можете сделать это напрямую.Вы должны перехватить внешнее исключение, проверить его getCause(), чтобы увидеть, соответствует ли оно тому, что вам нужно, а затем либо обработать его, либо повторно вызвать исключение верхнего уровня.

(Вы также можете технически повторнобросьте только внутренний, но я бы настоятельно не рекомендовал это: трассировка стека будет очень запутанной, и отладка будет труднее - особенно через год, когда вы забудете, что сделали это.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...