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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
CtMethod.setAttribute(String name, byte[] data)
Merci d'avance de vos réponses.

Cordialement.