使用 Apache ExceptionUtils.getRootCause 处理异常是否正确?
Is it right way for handling exceptions using Apache ExceptionUtils.getRootCause?
是否有可能满足 "My code" 中的以下条件(真)?我相信不,因为 getRootCause
returns 对象强制转换为 Throwable
。所以它应该检查 Throwable
是否是 MyOwnException
的子类型,这是不正确的。所以,一般来说,使用 getRootCause
来处理异常是错误的,不是吗?
MyOwnException 部分
public class MyOwnException extends Exception {
// ....
}
Apache 的 ExceptionUtils.getRootCause
public static Throwable getRootCause(Throwable throwable) {
List list = getThrowableList(throwable);
return (list.size() < 2 ? null : (Throwable)list.get(list.size() - 1));
}
我的代码
try {
// do something
} catch (Exception e) {
try {
Throwable exc = ExceptionUtils.getRootCause(e);
if (exc instanceof MyOwnException) {
// do something
}
}
}
instanceof
将检查对象实例的实际 运行 时间类型。保存对象的变量声明的编译时类型是什么并不重要。
所以你的条件有效:如果根本原因是 MyOwnException
那么你的 if
块的主体将执行。
是否有可能满足 "My code" 中的以下条件(真)?我相信不,因为 getRootCause
returns 对象强制转换为 Throwable
。所以它应该检查 Throwable
是否是 MyOwnException
的子类型,这是不正确的。所以,一般来说,使用 getRootCause
来处理异常是错误的,不是吗?
MyOwnException 部分
public class MyOwnException extends Exception {
// ....
}
Apache 的 ExceptionUtils.getRootCause
public static Throwable getRootCause(Throwable throwable) {
List list = getThrowableList(throwable);
return (list.size() < 2 ? null : (Throwable)list.get(list.size() - 1));
}
我的代码
try {
// do something
} catch (Exception e) {
try {
Throwable exc = ExceptionUtils.getRootCause(e);
if (exc instanceof MyOwnException) {
// do something
}
}
}
instanceof
将检查对象实例的实际 运行 时间类型。保存对象的变量声明的编译时类型是什么并不重要。
所以你的条件有效:如果根本原因是 MyOwnException
那么你的 if
块的主体将执行。