Java 使用Apache ExceptionUtils.getRootCause处理异常是否正确?

Java 使用Apache ExceptionUtils.getRootCause处理异常是否正确?,java,exception-handling,Java,Exception Handling,我的代码中的以下条件是否可能为真?我相信不会,因为getRootCause会返回被丢弃的对象。所以它应该检查Throwable是否是MyOwnException的一个子类型,这是不正确的。所以,一般来说,使用getRootCause处理异常是错误的,不是吗 MyOwnException部分 Apache的ExceptionUtils.getRootCause instanceof将对照对象实例的实际运行时类型进行检查。保存对象的变量的声明编译时类型是什么并不重要 因此,您的条件是有效的:如果根本

我的代码中的以下条件是否可能为真?我相信不会,因为getRootCause会返回被丢弃的对象。所以它应该检查Throwable是否是MyOwnException的一个子类型,这是不正确的。所以,一般来说,使用getRootCause处理异常是错误的,不是吗

MyOwnException部分

Apache的ExceptionUtils.getRootCause

instanceof将对照对象实例的实际运行时类型进行检查。保存对象的变量的声明编译时类型是什么并不重要

因此,您的条件是有效的:如果根本原因是MyOwnException,那么您的If块的主体将执行

public class MyOwnException extends Exception {
   // ....
}
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
        } 
    }
}