【发布时间】:2016-05-11 16:00:15
【问题描述】:
对于我一直在做的一个项目,我们有一些看起来像这样的块:
A类:
try {
callSomeMethod();
}
catch (Exception e) {
throw new SomeCustomExceptionTypeForMetrics("");
}
但是,我的任务是用仅特定“预期”类型的异常替换我们捕获通用异常的所有实例。
问题是 callSomeMethod() 有这样的东西
B类:
try {
if (someCondition...) {
}
else {
//failed
throw new RuntimeException("Timeout while waiting for results")
}
}
catch(InterruptedException e) {
// do some failure stuff here
throw new RuntimeException("Something here");
}
理想情况下,我的小组要求我尽可能地更改little,我无法更改 callSomeMethod() 的签名,但他们也不想只捕获任何 RuntimeException A 类,因为他们不想捕获任何类型的 RuntimeException - 只有我们从 B 类中排除的那些。
处理此问题的最佳方法是什么?
【问题讨论】:
-
将
RuntimeExeptions 更改为更具体的内容。如果需要,创建自定义类。 -
我是否理解正确:您应该捕获 RuntimeExceptions,但前提是它们在 java 代码中使用“throw new RuntimeException()”显式抛出,同时忽略可能来自某个地方的那些还有吗?
-
修改B类是一种选择吗?
-
感谢您的建议。回答 911DidBush 和 slambeth: * 基本上,如果除了我们期望的异常(InterruptedException 或如果我们由于 if 条件而抛出一个异常)之外还抛出任何其他异常,我们不应该在 A 类中捕获它。 * B 类可以可以修改,但不能签名
标签: java exception try-catch runtimeexception unchecked-exception