У меня есть код, выдающий reactor.core.Exceptions$RetryExhaustedException
, и я хотел бы перехватить это конкретное исключение.
Однако это RetryExhaustedException
не общедоступный класс, это частный статический класс пакета в общедоступном классе реактора.core.Exceptions, поэтому я не могу просто поместить его в оператор catch. Поскольку исключение расширяется IllegalStateException
, я мог бы это уловить, но это очень широкое исключение, с которым я бы предпочел вообще не обращаться.
(Обратите внимание, что я не говорю об устаревшем (публичном) классе reactor.retry.RetryExhaustedException
. Это не то же самое исключение.)
Ответ, который я сейчас принял, использует только API публичного реактора, поэтому я немного более уверен, что то, чем я являюсь, имеет смысл.
Чего я не понимаю, так это почему вопрос, настолько ясный, что на него получают два разных точных ответа от людей, которым не нужно было комментировать вопрос, получает закрытое голосование из-за отсутствия ясности.
Я думаю, вы могли бы сделать что-то вроде:
try {
// Your reactive operations
} catch (IllegalStateException e) {
if (e.getClass().getName().equals("reactor.core.Exceptions$RetryExhaustedException")) {
// Handle the RetryExhaustedException case
} else {
throw e; // rethrow the exception if it's not RetryExhaustedException
}
}
но это не так элегантно. 🤢
не элегантно, но он делает именно то, что я хочу, а именно перехватывать исключение без опасности проглотить несвязанные исключения.
Однако я думаю, что изменю это на e.getClass().getName().contains("RetryExhaustedException")
, что кажется более надежным в случае обновления реактора.
Я изменил свой значок принятия на другой ответ, потому что он показывает, как это должно быть сделано. Тем не менее ваш ответ полезен для других закрытых классов исключений, которые могут быть созданы любой библиотекой. Я сохраню этот трюк в рукаве, надеясь, что он мне не понадобится.
Я думаю, вы могли бы использовать метод Exceptions.isRetryExhausted(e)
, чтобы проверить, является ли данное исключение RetryExhausted
.
Также с помощью этого класса вы можете проверять другие исключения из класса Exceptions
, см. методы, начинающиеся с is...
.
Это путь. Идеальный.
Я принял ответ, который делает именно то, что я хочу, но я открыт для мысли, что у меня здесь XY-проблема (например, перехват этого исключения совершенно ошибочен), и я был бы признателен за ответы в этом направлении.