Есть ли канонический лучший способ сделать это для следующей ситуации?
У меня есть блок кода, который может генерировать множество различных исключений, каждое из которых обрабатывается путем скрытия диалога, отображения сообщения об ошибке и запуска метода onDisconnect()
.Подвох в том, что для каждого исключения сообщение об ошибке должно быть разным.На мой взгляд, есть два варианта.Первый - перехватить Exception
, а затем обработать различные исключения внутри блока catch, используя instanceof
, например:
} catch (Exception e) {
dialog.dismiss();
String errorMessage = getString(R.string.default_error);
if (e instanceof ArrayIndexOutOfBoundsException)
errorMessage = getString(R.string.bad_host);
else if (e instanceof UnknownHostException)
errorMessage = getString(R.string.unknown_host);
else if (e instanceof NumberFormatException)
errorMessage = getString(R.string.bad_port);
else if (e instanceof IOException)
errorMessage = getString(R.string.no_connection);
showError(errorMessage);
onDisconnect();
}
Другой вариант - перехватить все из них по отдельности, например:1009 *
} catch (ArrayIndexOutOfBoundsException e) {
dialog.dismiss();
showError(getString(R.string.bad_host));
onDisconnect();
} catch (UnknownHostException e)
dialog.dismiss();
showError(getString(R.string.unknown_host));
onDisconnect();
} // ...etc.
Есть ли предпочтительный способ сделать это?Я выбрал первый случай (по крайней мере, на данный момент), потому что он минимизирует дублирующийся код, но я также слышал, что instanceof
и catch (Exception)
- дела сатаны.