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){
...
}
我是 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){
...
}