加载一个实现另一个Java的类

加载一个实现另一个Java的类,java,class,dynamic,reflection,Java,Class,Dynamic,Reflection,我试图通过获取一些类的字节并使用反射来使用defineClass方法来动态加载它们。这是我的代码(这是一个循环) 但是当一个类实现另一个类时,它会抛出一个NoClassDefFoundError(实现的类尚未加载)。我不知道该怎么做,我试着加载了几次来解决这个问题,但都不起作用。在加载类之前,我还搜索了将所有类添加到类路径中,但我不知道如何使用字节数组来实现这一点。动态类加载程序是Java所做的。不需要绕过语言访问限制。子类SecureClassLoader以通常的方式。您确定要传递的类名与数组

我试图通过获取一些类的字节并使用反射来使用defineClass方法来动态加载它们。这是我的代码(这是一个循环)


但是当一个类实现另一个类时,它会抛出一个NoClassDefFoundError(实现的类尚未加载)。我不知道该怎么做,我试着加载了几次来解决这个问题,但都不起作用。在加载类之前,我还搜索了将所有类添加到类路径中,但我不知道如何使用字节数组来实现这一点。

动态类加载程序是Java所做的。不需要绕过语言访问限制。子类
SecureClassLoader
以通常的方式。

您确定要传递的类名与数组中字节定义的类匹配吗?请注意,它是预期的二进制名称,与Java源代码中使用的形式不同。或者您应该能够通过传递
null
作为类名来回避整个问题,前提是您确信字节定义了所需的类。是的,它匹配,即使我传递
null
作为参数,它也找不到实现的类。这很奇怪,因为没有实现一个类,它就可以完美地工作。你的意思是我应该在没有反射的情况下使用
SecureClassLoader
,而不是在有反射的情况下使用
ClassLoader
。但是你不需要在
setAccessible
上乱动。哦,好吧,我明白了,但区别只是有权限,对吗?我添加了加载字节数组的类的CodeSource,但它仍然向我抛出了无法找到(尚未加载)的实现类的错误
Main.class.getProtectionDomain().getCodeSource()
@Rage No.使用
loadClass
从外部获得
。实现
findClass
来定义类。API文档中有一些示例代码用于
java.lang.ClassLoader
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);