Обработка исключений во время выполнения в Java
У меня есть следующий кусок кода
try{//do something
}
catch (Exception e) {
log.error(e, e);
if (e instanceof RuntimeException) {
throw (RuntimeException) e;
} else {
throw new RuntimeException(e);
}
}
инструмент статистического анализа findbugs выдает это предупреждение
instanceof всегда будет возвращать true для всех ненулевых значений в methodX, поскольку все RuntimeException являются экземплярами RuntimeException
то, что я не понимаю, это то, что его исключение, которое ловится, а не RuntimeException, так почему это предупреждение?
4 ответа
Вы также можете попробовать следующий код. Это будет лучше читать и поддерживать.
try{//do something
}
catch (RuntimeException e) {
throw e;
}
catch (Exception e) {
throw new RuntimeException(e);
}
Возможно, // do something
код не генерирует никаких проверенных исключений, поэтому единственные исключения, которые вы можете получить в своем блоке try, - это непроверенные (подклассы RuntimeException
).
Вероятно, нет методов, которые генерируют исключение RuntimeException в части "try". Следовательно, вы можете использовать конструкцию
catch(RuntimeException e)
{
//Do something
}
Попробуйте http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/Throwables.html. Это именно то, что вы хотите. Сегодня я сделал замену по той же причине (предупреждение findbugs), также посмотрел источник этого метода.