我在加载由两个不同的类加载器实例化的对象时遇到问题。基本上我实现了一个带有三个不同插件的webapp,每个插件都有自己的类加载器。项目结构如下所示:
MyAppService
- ObjectInterface.java
MyAppImpl
- ObjectImplementation.java
MyClass
- MyClass.java
它是一个以maven为基础的项目。 MyAppImpl
和MyClass
都有MyAppService
作为依赖项。现在,我使用此代码在类ObjectImplementation
中创建类ObjectImplementation
的对象。
ObjectInterface o = new ObjectImplementation();
我想将此对象传递给类Myclass
中的方法,在此处使用此代码获取对象。
ObjectInterface o = (ObjectInterface) passedObject;
但我得到例外java.lang.ClassCastException: MyAppImpl.ObjectImplementation cannot be cast to MyAppService.ObjectInterface
。我还尝试使用代码
ObjectInterface o = (ObjectInterface) Class.forName("MyAppImpl.ObjectImplementation").newInstance();
但我得到例外java.lang.ClassNotFoundException: MyAppImpl.ObjectImplementation
。添加MyAppImpl作为MyClass的依赖项目前不是一个选项。有谁知道我的问题是否有解决方案?
答案 0 :(得分:0)
请阅读有关ClassLoaders及其层次结构的信息。另请阅读委托机制。
在您的情况下,类由叶类加载器加载,并且同一类的不同副本。如果特定类未被当前类加载器或其任何父级加载,那么您将获得java.lang.ClassCastException
。