Chciałbym utworzyć program podklasowy. Chyba mam kilka opcji - Javassist, CGLib, BCEL lub ASM.Java - tworzenie podklasy dynamicznie
W przypadku użycia jedna aplikacja jest zorientowana na klasę, a rozszerzenia są oparte na klasach. Dlatego nie mogę mieć jednej klasy jako bazy dla wielu rozszerzeń sterowanych przez zewnętrzne skrypty.
Teraz - jak to zrobić? Znalazłem przykłady z przechwytywaniem wywołań metod, dostępu do pola, inicjalizacji itp. Ale nic o podklasowaniu.
Chciałbym skończyć z klasy, które:
- ma imię, które chcę.
- jest (bezpośrednie, w najlepszym wypadku) podklasę danej klasy
- kopiuje konstruktora (ów) z klasy nadrzędnej (lub zwraca
super(...)
) - końcu, chciałbym dać mu jakieś adnotacje.
Wiem, że jest to możliwe, ponieważ różne integracje języków dynamicznych, takie jak GroovyClassLoader
, mogą to zrobić.
Właściwie najpierw spojrzałem na proxy, ale opuściłem to ze względu na złożoność. Javassist jest tak łatwiejszy. Ponadto serwery proxy potrzebują interfejsu i nie mogą być dalej zastępowane jako normalne klasy ... w każdym razie +1 –