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