0

自定义 RuntimeException 类不是自定义异常类的实例。但 RuntimeException 是 Exception 的实例。为什么???

我为我的项目创建了两个异常类:

public class ABCRuntimeException extends RuntimeException {
    //Functions...
}

public class ABCException extends Exception {
    //Functions...
}

现在我正在尝试像这样处理这些异常:

try{
    //Code which throw ABCRuntimeException
} catch(Exception e) {
    if(e instanceof ABCException) {
       System.out.println("Is instance of ABCException");
    } else if(e instanceof Exception) {
       System.out.println("Is instance of Exception");
    }
}

输出是Is instance of Exception。为什么 ABCRuntimeException 不是 ABCException 的实例。

以及如何处理这种异常情况,以便我可以为 ABCRuntimeException 和 ABCException 应用通用逻辑,而无需将 OR 运算符置于 if 条件中?

4

2 回答 2

2

为什么ABCRuntimeException不是ABCException.

因为你没有那样定义它

public class ABCRuntimeException extends RuntimeException 

public class ABCException extends Exception 

以及如何处理这种异常情况,以便我可以为 ABCRuntimeException 和 ABCException 应用通用逻辑,而无需将 OR 运算符置于 if 条件中?

在这种情况下,您的异常仅Exception作为超类型共享||是合适的。(Exception如果您不关心抛出的其他类型的异常,您也可以捕获。)

于 2014-12-30T20:49:14.447 回答
0

在 java 中可以扩展多个类的异常。如果您从 ABCException 和其他父异常扩展它,这应该可以工作。

于 2014-12-31T07:32:43.427 回答