我是 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具有值(value):
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
引用的异常实例是否与类 MyException
兼容,您应该传递 e
作为 MyException.class.isInstance()
的参数。
作为替代方案,您可以使用 isAssignableFrom
:
if (e.getClass().isAssignableFrom(MyException.class))
关于java - 同一类上的 isInstance() 在异常处理期间返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54275964/