似乎我应该能够使用派生的类加载器来做到这一点,URLClassLoader
其中包括loadClass()
:
public Class loadClass(String className, byte[] classBytes)
throws ClassNotFoundException, NoClassDefFoundError
{
Class result = null;
result = defineClass(className, classBytes, 0, classBytes.length);
classes.put(className, result);
return result;
}
然后我从一个类文件中读取字节并调用上面的 loadClass 方法。我明白了:
java.lang.NoClassDefFoundError: com/samples/SampleClass (wrong name: com/samples/SampleClass)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at java.lang.ClassLoader.defineClass(ClassLoader.java:465)
奇怪的是名字和“错误的名字”是一样的。两者都是正确的包装。
如何获得NoClassDefFoundError
正确的预期名称?有可能做到这一点defineClass
吗?
使用不推荐使用的形式,没有类名,可以完美地工作:
result = defineClass(classBytes, 0, classBytes.length);
谢谢