isInstance() on same class returns false 在异常处理期间

isInstance() on same class returns false during exception handling

我是 java 的新手,正在尝试在特定的异常处理场景中实现 isInstance()。

try {

       ....
       ..//some condition
          throws MyException(); //  --> MyException extends RuntimeException

}catch(Exception e){
       if(e.getClass().isInstance(MyException.class))  // --> This returns false
                .. //do something
}

上面的 isInstance() returns 错误。 当我调试时,e.getClass() 有一个值 :

in.soumav.exceptions.MyException (id=133)

MyException.class的值:

in.soumav.exceptions.MyException (id=133)

我错过了哪个概念?

你搞反了。

应该是:

if (MyException.class.isInstance(e))

Javadoc:

boolean java.lang.Class.isInstance(Object obj)

Determines if the specified Object is assignment-compatible with the object represented by this Class.

所以,如果你想检查 e 引用的异常实例是否与 class MyException 的赋值兼容,你应该将 e 作为参数传递至 MyException.class.isInstance().

作为替代方案,您可以使用 isAssignableFrom:

if (e.getClass().isAssignableFrom(MyException.class))

MyException.class 是 Class 而不是 MyException 的实例,所以

MyException.class.isInstance(e)

应该这样做,但你的目的应该像这样处理:

try {

      ....
      ..//some condition
         throws MyException(); //  --> MyException extends RuntimeException

}catch(MyException e){
    ... //do something
}catch(Exception e){
    ...
}