我是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()返回false。
当我调试时,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)
  
  确定指定的Object是否与此类表示的对象赋值兼容。


因此,如果要检查e引用的异常实例是否与类MyException兼容,则应将e作为参数传递给MyException.class.isInstance()

或者,您可以使用isAssignableFrom

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

10-07 16:07