我有两个加载同一个类的ClassLoader。因此,显然这些不能互相转换。但是我需要访问在其他ClassLoader中创建的对象。

我可以访问两个ClassLoader。如何在其他类(class)中使用该对象?我不需要强制转换对象以匹配当前的ClassLoader。

但是问题在于返回的对象的类型是Object。因此,我必须放弃该对象才能访问某些方法。我怎样才能做到这一点?像下面这样的普通类型转换会导致ClassCastException,这是我已经知道的。

Mojo mojo = (Mojo) descriptor.getMojo();
descriptor#getMojo()返回类型为Mojo的对象,但该方法返回Object。怎么办呢?

让我知道您是否需要更多信息。

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

最佳答案

AFAIK,不,您不能在一个类加载器中强制转换由一个类加载器加载的类的对象。

  • 一种解决方案是创建一个“公共(public)”类加载器,该类加载器将加载供您的自定义类加载器使用的类。因此,在您的情况下,您将有一个新的类加载器,它将加载给定的类,而您的自定义类加载器将扩展此类加载器。
  • 另一个解决方案是在两个类加载器之间传递“序列化”状态。将一个实例序列化为字节数组,并通过反序列化对象流在另一个类加载器中重建对象。
  • 10-05 19:44