如何检查异常的类型以及它们嵌套异常的类型?

2022-09-02 12:59:09

假设我捕获了一个类型的异常,但我只想对该异常执行某些操作,如果它具有类型的嵌套异常。AppExceptionStreamException

if (e instanceof AppException)
{
    // only handle exception if it contains a
    // nested exception of type 'StreamException'

如何检查嵌套?StreamException


答案 1

做:。if (e instanceof AppException and e.getCause() instanceof StreamException)


答案 2

也许您可以尝试为特定目的子类化 AppException,而不是检查原因。

例如。

class StreamException extends AppException {}

try {
    throw new StreamException();
} catch (StreamException e) {
   // treat specifically
} catch (AppException e) {
   // treat generically
   // This will not catch StreamException as it has already been handled 
   // by the previous catch statement.
}

您也可以在java中的其他地方找到这种模式。一个是IOException的例子。它是许多不同类型的IOException的超类,包括但不限于EOFException,FileNotFoundException和UnknownHostException。