使用 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 块的主体将执行。