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

罗瓦那:

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

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

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

Mojo mojo = (Mojo) descriptor.getMojo();

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

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

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

Sanjay T. Sharma:

AFAIK,不,您不能将一个类加载器加载的类的对象转换为另一类加载器。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章