[英]How to load same class with two different classloaders
我在加载由两个不同的类加载器实例化的对象时遇到问题。 基本上,我用三个不同的插件实现了一个Webapp,每个插件都有自己的类加载器。 项目结构如下所示:
MyAppService
- ObjectInterface.java
MyAppImpl
- ObjectImplementation.java
MyClass
- MyClass.java
它是一个基于Maven的项目。 MyAppImpl
和MyClass
都将MyAppService
作为依赖项。 现在,我使用此代码在ObjectImplementation
中创建一个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的依赖项。 有人知道我的问题是否有解决方案吗?
请阅读有关ClassLoader及其层次结构的信息。 另请参阅有关委派机制。
在您的情况下,类由叶类加载器加载,并且同一类有不同的副本。 如果特定类未由当前类加载器或其父级加载,则您将获得java.lang.ClassCastException
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.