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