我是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)
我想念哪个概念?
答案 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))