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

标签 java exception 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具有值(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/

相关文章:

python - 是 bool 的实例吗?

Python-isinstance-加号(+)的使用

python 2.7 isinstance 在动态导入的模块类中失败

java - 查找出现次数最多的数字

java.lang.NoClassDefFoundError : Could not initialize class org. apache.xmbeans.XmlBeans 错误

java - 需要使用java应用程序合并Avro文件

Java,使用 AffineTransform 不完全居中旋转

c# - 你能 catch using block 吗?

php - 异常:不允许序列化 'Closure'

c++ - C++ 是否已经有了某种反射?