Кажется, что я должен быть в состоянии сделать это с загрузчиком классов, полученным из 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);
Спасибо