针对以下情况,是否有最佳实践方法?我有一段代码块可以生成多种不同的异常,每个异常都通过隐藏对话框、显示错误消息和运行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();
}
另一种选择是单独捕获所有内容,如下所示:
} 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)
是魔鬼的作品。