Дело в том, что инструмент статического анализа в основном сканирует ваш код на предмет нарушений (как считает автор инструмента) «лучших практик».В этом случае обычно считается «наилучшей практикой» иметь очень мелкие иерархии исключений.
Причина в том, что в основном есть два раза, когда вы поймаете исключение.Во-первых, вы хотите перехватить исключение, потому что вы знаете, как его обработать .Например:
try
{
return fetchDataFromFile();
}
catch(FileNotFoundException)
{
return defaultData;
}
В этом случае вы поймали FileNotFoundException
, потому что вы хотите вернуть «данные по умолчанию», когда файл не найден.В этой ситуации вы обычно перехватываете специфический класс исключений - потому что это единственный тип исключения, который вы знаете, как обрабатывать (например, если fetchDataFromFile
выдает другое исключение, вы не хотите, чтобы оновернуть данные по умолчанию.
В другой раз вы будете ловить исключения в самом корне вашего потока,
try
{
doStuff();
catch(Exception e)
{
logException(e);
notifyUser(e);
}
В этом случае вы ловите корневой класс исключений, потому что вы специальнохотите все исключения, чтобы вы могли регистрировать их или уведомлять пользователя.
Есть очень немного ситуаций, когда вам нужно что-то делать.
Теперь запомните, чтоэто инструмент статического анализа. Его задача - просто пометить вам «потенциальные» проблемы. Если вы считаете, что ваша ситуация как-то отличается, то идея заключается в том, чтобы вы задокументировали, почему вы думаете, что это не так, и специально отключили это предупреждение для этого разделакод (или этот класс или что-то).