Vorrei creare una sottoclasse in modo programmatico. Credo di avere poche opzioni - Javassist, CGLib, BCEL o ASM.Java - creazione dinamica di una sottoclasse
Il caso d'uso è che gli interni di una app sono orientati alla classe e le estensioni sono basate sulla classe. Pertanto non posso avere una singola classe come base per più estensioni guidate da script esterni.
Ora, come potrei farlo? Ho trovato esempi con l'intercettazione di chiamate di metodo, accesso al campo, inizializzazione ecc. Ma nulla sulla sottoclasse.
mi piacerebbe finire con una classe che:
- ha un nome che voglio.
- è una (diretta, nella migliore delle ipotesi) sottoclasse di una data classe
- copie del costruttore (s) dalla classe genitore (o chiamate
super(...)
) - alla fine, mi piacerebbe dargli alcune annotazioni.
So che è possibile perché varie integrazioni di linguaggi dinamici, come GroovyClassLoader
, possono farlo.
In realtà ho guardato prima i proxy ma l'ho lasciato a causa della complessità. Javassist è così facile. Inoltre, i proxy necessitano di un'interfaccia e non possono essere ulteriormente sostituiti dalle normali classi ... comunque, +1 –