Обработка исключений во время выполнения в 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), также посмотрел источник этого метода.

Другие вопросы по тегам