【发布时间】:2019-05-16 18:48:55
【问题描述】:
我试图通过获取它们的字节并使用反射来动态加载一些类来使用 defineClass 方法。这是我的代码(这是一个循环)
Method m = java.lang.ClassLoader.class.getDeclaredMethod("defineClass", String.class, byte[].class, int.class, int.class);
m.setAccessible(true);
m.invoke(Main.class.getClassLoader(), className, classBytes, 0, classBytes.length);
但是当一个类实现另一个类时,它会抛出 NoClassDefFoundError(实现的类尚未加载)。我不知道该怎么做,我尝试加载几次以解决此问题,但它不起作用。我还搜索在加载它们之前将所有类添加到类路径中,但我不知道如何使用字节数组来执行此操作。
【问题讨论】:
-
您确定您传递的类名与数组中字节定义的类匹配吗?请注意,它是预期的 binary 名称,它与 Java 源代码中使用的形式不同。或者你应该能够通过传递
null作为类名来回避整个问题,前提是你确信你的字节定义了你想要的类。 -
是的,它匹配,即使我将
null作为参数传递,它也找不到实现的类。这很奇怪,因为没有实现一个类它可以完美地工作。
标签: java class dynamic reflection