同一类上的isInstance()在异常处理期间返回false

时间:2019-01-20 11:26:12

标签: java exception-handling isinstance

我是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)

我想念哪个概念?

2 个答案:

答案 0 :(得分:3)

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

MyException.class.isInstance(e)

应该这样做,但是您的目的应该按照以下方式处理:

try {

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

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

答案 1 :(得分:2)

你倒过来了。

应该是:

if (MyException.class.isInstance(e))

Javadoc:

  

布尔型java.lang.Class.isInstance(Object obj)

     

确定指定的Object是否与此类表示的对象赋值兼容。

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

您也可以使用isAssignableFrom

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