Вы действительно хотите создать новый класс во время выполнения?Если это так, то
- вам потребуется байт-код класса, а
- создайте новый ClassLoader, который может использовать этот байт-код для создания вашего класса.
Для 1: вы можете, например, взять байт-код из какой-либо базы данных или чего-то еще, если он уже существует.В противном случае вам нужно будет создать его - либо сгенерировав исходный код Java и скомпилировав его (что означает, что должен быть доступен компилятор Java), либо с помощью библиотеки разработки байт-кода, такой как ASM.(Конечно, вы также можете сделать это вручную, но я бы не рекомендовал это делать.)
Все зависит от того, что вы действительно хотите сделать.
Для 2: Создать подкласс изClassLoader
и реализуйте метод findClass
, чтобы получить байт-код и вызвать для вас defineClass
.Создайте объект этого класса и передайте его в качестве аргумента методу Class.forName()
или просто вызовите loader.loadClass(name)
.
Если ваш новый класс использует какие-либо другие классы, они должны быть загружены либо одним и тем жезагрузчик классов или любой загрузчик классов предков, в противном случае вы получите ошибки времени выполнения.