Class.java 的 isAssignableFrom 函数
我正在尝试遵循
Context ctx = (Context) jndiCntx.lookup(fSTANDARD_ENVIRONMENT);
对象 obj = ctx.lookup(fSTANDARD_JNDINAME);
但以下代码返回 false
MyClass.class.isAssignableFrom(obj.getClass()) 。
尽管
MyClass.class.getName().equalsIgnoreCase(obj.getClass().getName()) 返回 true,
我无法将 obj 转换为 MyClass,因为它抛出 ClassCastException。
可能是什么问题?
I am trying following
Context ctx = (Context) jndiCntx.lookup(fSTANDARD_ENVIRONMENT);
Object obj = ctx.lookup(fSTANDARD_JNDINAME);
And following code is returning me false
MyClass.class.isAssignableFrom(obj.getClass())
although
MyClass.class.getName().equalsIgnoreCase(obj.getClass().getName()) returns true.
I am not able to cast obj to MyClass as it throws ClassCastException.
What could be the issue?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我的猜测是该类已由两个不同的类加载器加载。
查看
obj.getClass().getClassLoader()
与在当前代码中调用getClassLoader()
的情况。该类本身可以从两个不同的 jar 文件中获取吗?这通常很容易解决。如果您有两个单独的类加载器,它们都使用相同的 jar 文件,那就更难了。
你在什么容器中运行?我建议您查看类加载器的特定于容器的文档...例如,这里是 Tomcat 5.5 类加载器操作方法。
My guess is that the class has been loaded by two different classloaders.
Look at
obj.getClass().getClassLoader()
vs callinggetClassLoader()
in your current code.Is the class itself available from two different jar files? That's normally an easy one to sort out. It's harder if you've got two separate classloaders which both use the same jar file.
What container are you running in? I suggest you look at the container-specific documentation for classloaders... for example, here's the Tomcat 5.5 ClassLoader how-to.
等等,为什么你调用“equalsIgnoreCase”来检查类名而不是简单的“equals”? (几乎)匹配的名称之间是否有可能存在冲突?
hang on, why are you calling "equalsIgnoreCase" to check the classnames rather than just plain "equals"? Is it possible you've got a conflict between (nearly) matching names?