对于以下情况,有没有规范的最佳做法?在Java中以类似的方式处理多个异常的最佳实践
我有一段代码,可以生成一些不同的例外,每个例外都是通过隐藏对话框,显示错误消息并运行一个onDisconnect()
方法来处理的。问题在于,对于每个异常,错误消息都需要不同。正如我所看到的那样,有两种选择。首先是使用instanceof
赶上Exception
,然后处理catch块中的各种异常,例如:
} 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.
有没有一种首选的方法来做到这一点?我选择了第一种情况(至少现在是这样),因为它使重复代码最小化,但我也听说和catch (Exception)
是撒旦的作品。
已经有这种解决方案的几个评论,但你用了几分钟打出来。我喜欢这个解决方案;现在执行它。谢谢! – 2011-04-01 23:01:29
如果你不希望添加一个新的处理方法,你可以这样做,因为Java 7的尝试{...}赶上(Exception1 | Exception2前){ex.printStackTrace();} – 2016-04-11 02:24:33