Как создать свой собственный тип класса во время выполнения в Java?Там не существует никакого определения класса - PullRequest
0 голосов
/ 03 июня 2019

У меня есть определение проблемы, где мне нужно создать тип класса и добавить поля, методы к нему во время выполнения в Java. Когда у меня есть объект Class определенного типа, я могу создать экземпляр этого класса.

В основном мне запрещено вносить изменения в байт-код или выполнять операции с диском. Просто нужно сделать операцию в памяти.

Я также попытался расширить java.lang.ClassLoader и предоставить собственную реализацию defineClass (). Но этот метод является окончательным, поэтому не может переопределить его.

Пробовал ниже код, но не помогло:

public class MethodParameterSpy {
public static class MyClassLoader extends ClassLoader{
        public Class loadClass(String name) throws ClassNotFoundException {
                return defineClass("MyObject","public class Demo{ int i; }".getBytes(), 0,"public class Demo{}".getBytes().length+1);
        }
    }
    public static void main(String... args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        ClassLoader clloader=new MethodParameterSpy.MyClassLoader();
        Class c=clloader.loadClass(null);
        System.out.println(c);
    }
}


Exception in thread "main" java.lang.ClassFormatError: Incompatible magic value 1886741100 in class file MyObject
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at MethodParameterSpy$MyClassLoader.loadClass(MethodParameterSpy.java:71)
    at MethodParameterSpy.main(MethodParameterSpy.java:78)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...