Sono un novizio di Javassist, e ho già letto alcuni tutorial relativi ad esso.Possiamo aggiungere un campo non primitivo a una classe esistente usando javassist?
Perché ho bisogno di eseguire un'iniezione bytecode in ciascun metodo prima di entrare o prima dell'uscita del metodo, e ottenere alcune statistiche da questo.
attraverso il tutorial javassit on-line, trovo che siamo in grado di fare un nuovo campo a una classe esistente:
CtClass point = ClassPool.getDefault().get("Point");
CtField f = new CtField(CtClass.intType, "z", point);
point.addField(f);
Ma il tipo di CtField contiene solo tipo primitivo per difetto, siamo in grado di aggiungere un nuovo campo il cui tipo non è primitivo, ad esempio ArrayList?
Se riesco ad aggiungere il nuovo campo ArrayList alla classe esistente, poiché la classe non importa java.util.ArrayList, causerà l'errore di compilazione?
Grazie, il codice di cui sopra significa che si aggiunge la nuova someList membro ArrayList alla classe punto, ma nella classe punto non l'abbiamo fatto' t importare java.util.ArrayList, causerà l'errore di compilazione? – LifeOnCodes
Bene, l'aggiunta del *** bytec *** che rappresenta un campo java.util.ArrayList, non una stringa di lingua inglese effettiva. Le istruzioni di importazione sono solo direttive del compilatore che non compaiono nel file di classe compilato. Che è, a proposito, perché è necessario utilizzare un nome completo (FQN) durante la ricerca di classi in ClassPool. – Perception
Grazie mille, vedo. Penso che dovrei passare un po 'di tempo a studiare il bytecode. Un'altra domanda, si spera che tu possa aiutarmi, è possibile che il memeber della lista sia un tipo generico, come ArrayList someList? –
LifeOnCodes