2

我正在尝试关注

上下文 ctx = (上下文) jndiCntx.lookup(fSTANDARD_ENVIRONMENT);

对象 obj = ctx.lookup(fSTANDARD_JNDINAME);

下面的代码让我返回错误

MyClass.class.isAssignableFrom(obj.getClass())

虽然

MyClass.class.getName().equalsIgnoreCase(obj.getClass().getName()) 返回真。

我无法将 obj 转换为 MyClass,因为它会引发 ClassCastException。

可能是什么问题?

4

2 回答 2

2

我的猜测是该类已由两个不同的类加载器加载。

查看当前代码中的obj.getClass().getClassLoader()vs 调用getClassLoader()

类本身是否可以从两个不同的 jar 文件中获得?这通常很容易解决。如果你有两个单独的类加载器,它们都使用相同的 jar 文件,那就更难了。

你在什么容器中运行?我建议您查看类加载器的容器特定文档...例如,这是Tomcat 5.5 ClassLoader how-to

于 2009-10-28T07:53:55.580 回答
0

等等,你为什么要调用“equalsIgnoreCase”来检查类名而不是简单的“equals”?您是否可能在(几乎)匹配的名称之间存在冲突?

于 2009-11-18T18:13:01.303 回答