由于ClassLoader问题导致ClassCastException的解决方案

rav*_*ana 6 java classloader classcastexception

我有两个ClassLoader加载相同的类.所以,显然这些不能相互投射.但是我需要访问在另一个ClassLoader中创建的对象.

我可以访问两个ClassLoader.如何在其他类中使用该对象?我不需要将对象转换为与当前ClassLoader匹配.

但问题是返回的对象的类型是Object.所以,我必须抛弃该对象来访问某些方法.我怎样才能做到这一点?像下面这样的正常转换会导致ClassCastException,我已经知道了.

Mojo mojo = (Mojo) descriptor.getMojo();
Run Code Online (Sandbox Code Playgroud)

descriptor#getMojo()返回一个类型的对象,Mojo但该方法返回Object.怎么办呢?

如果您需要进一步的信息,请告诉我.

我已经阅读了有关类加载的所有理论,但没有一个为此指定了适当的解决方案.

San*_*rma 8

AFAIK,不,你不能在另一个类加载器中转换由一个类加载器加载的类的对象.

  • 一种解决方案是创建一个"通用"类加载器,它加载要由自定义类加载器使用的类.因此,在您的情况下,您将有一个新的类加载器,它将加载给定的类,您的自定义类加载器将扩展此类加载器.
  • 另一种解决方案是在两个类加载器之间传递"序列化"状态.将一个实例序列化为字节数组,并通过反序列化对象流来重构另一个类加载器中的对象.