Это действительно ужасная практика.Особенно ловля Exception
, а не что-то конкретное, выделяет ужасный запах - даже NullPointerException
будет проглочен.Даже если есть уверенность в том, что конкретное выброшенное исключение не имеет реального значения, всегда следует регистрировать его как минимум:
try {
// code
}
catch (MyInconsequentialException mie) {
// tune level for this logger in logging config file if this is too spammy
MY_LOGGER.warning("Caught an inconsequential exception.", mie);
}
Однако вряд ли это исключение совершенно бессмысленно в этой ситуации.Я рекомендую выяснить, какие именно исключения код приложения намеревается проглотить, и что они действительно означают для выполнения.
Одно важное различие заключается в том, используются ли try / catch для проглатывания проверенных исключений.Если это так, то это, вероятно, указывает на крайнюю апатию со стороны программиста - кто-то просто хотел, чтобы его / ее код компилировался.По крайней мере, код должен быть изменен:
try {
// code
}
catch (SpecificCheckedException sce) {
// make sure there is exception logging done farther up
throw new RuntimeException(sce);
}
Это перезапустит исключение, заключенное в непроверенный RuntimeException
, эффективно позволяя скомпилировать код.Тем не менее, даже это может считаться бандой. Лучшая практика для проверенных исключений - обрабатывать их на индивидуальной основе, либо в текущем методе, либо дальше, добавляя throws SpecificCheckedException
к сигнатуре метода.
As @ Tom Hawtin упомянуто, new Error(sce)
может использоваться вместо new RuntimeException(sce)
, чтобы обойти любые дополнительные Exception
ловушки дальше, что имеет смысл для чего-то, что не должно быть брошено.
Если try / catch не используется для проглатывания проверенных исключений, это одинаково опасно и должно быть просто удалено.