[Javassist] Modifier une classe
Bonjour,
Je souhaite modifier pendant l'exécution une de mes classes, c'est à dire, en ajoutant un champ avec ses getter et setter.
Donc voici ce que j'essaie de faire:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
import javassist.CtClass;
import javassist.CtField;
import javassist.CtMethod;
import javassist.Modifier;
CtClass ctClass ;
CtClass type = ClassPool.getDefault().get("java/lang/String");
// Adding the field: String field;
CtField field = new CtField(type, "field", ctClass);
field.setModifiers(Modifier.PRIVATE);
ctClass.addField(field);
// Adding the setter and the getter
CtMethod getter = new CtMethod(type, "getField", null, ctClass);
getter.setModifiers(Modifier.PUBLIC);
ctClass.addMethod(getter);
CtMethod setter = new CtMethod(CtClass.voidType, "setFieldh", new CtClass[] {type}, ctClass);
setter.setModifiers(Modifier.PUBLIC);
ctClass.addMethod(setter); |
Pendant l'exécution, ma classe est bien modifiée mais lorsqu'elle est instanciée, j'ai l'exception suivante :
Code:
1 2
| Exception in thread "main" java.lang.ClassFormatError:
Absent Code attribute in method that is not native or abstract in class file com/project/MyClass |
J'ai l'impression qu'il faut que j'ajoute des "attibutes" aux méthodes que j'ai ajoutées mais je ne sais pas utiliser la méthode
Code:
CtMethod.setAttribute(String name, byte[] data)
Merci d'avance de vos réponses.
Cordialement.