类与java中的相同类不兼容

时间:2015-03-19 10:33:23

标签: java java-ee

我正在使用WebSphere应用程序服务器。在某一点上,我收到的错误是:

com.savvion.sbm.dms.svo.Document incompatible with com.savvion.sbm.dms.svo.Document.

我在网上搜索过,发现错误原因是java中不同类加载器的类加载。

如何使用不同的类加载器阻止类加载。或替代解决方案。

1 个答案:

答案 0 :(得分:0)

您有问题的代码可能看起来像这样:

Document d = (Document)object;

其中“object”是在(custom?)类加载器上加载的Document类的实例,而 this 类中引用的Document类(即在“d”的声明中,和在转换中)加载在线程的上下文类加载器上。

因此,正如您所提到的,VM将这些视为两个不同的类,即使字节码完全相同:

  

如果两个类由相同的类加载器(第2.17.2节)加载并且它们具有相同的完全限定名(第2.7.5节),则它们是相同的类(因此是相同类型)。

http://docs.oracle.com/javase/specs/jvms/se6/html/Concepts.doc.html#20389

您的问题的解决方案取决于您的特定应用程序的构建和部署方式,而且可能并不简单。第一步是查看两个类的加载位置。通过在Java命令行参数中添加“-verbose:class”生成的输出应该显示类所在的JAR文件。