Я хотел бы создать подкласс программно. У меня есть несколько вариантов: Javassist, CGLib, BCEL или ASM.Java - создание подкласса динамически
Практический пример: внутренние элементы одного приложения ориентированы на классы, а расширения - на основе классов. Поэтому я не могу иметь один класс в качестве базы для нескольких расширений, управляемых внешними скриптами.
Теперь - как бы я это сделал? Я нашел примеры с перехватом вызовов методов, доступом к полям, инициализацией и т. Д. Но ничего не касается подкласса.
Я хотел бы закончить с классом, который:
- имеет имя, которое я хочу.
- является (прямой, в лучшем случае) подкласс данного класса
- копирует конструктор (s) из родительского класса (или вызывает
super(...)
) - в конце концов, я хотел бы дать ему несколько аннотаций.
Я знаю, что это возможно, потому что различные динамические интеграционные языки, такие как GroovyClassLoader
, могут это сделать.
На самом деле я сначала посмотрел на прокси, но оставил это из-за сложности. Джавасисту так легче. А также прокси-серверы нуждаются в интерфейсе и не могут быть переопределены как обычные классы ... в любом случае +1 –