我有一个名为Sample
的类,我需要将变量messageID
重命名为NameID
,以便更新相应的getter和setter。
public class Sample{
String messageID;
public String getMessageID() {
return MessageID;
}
public void setMessageID(String messageID) {
MessageID = messageID;
}
}
答案 0 :(得分:1)
使用Javassist,您可以将旧字段名称中的字段名称和所有引用更改为新字段名称。
ClassPool classpool = ClassPool.getDefault();
CtClass ctClass = classpool.get(Sample.class.getName());
CtField field = ctClass.getField("messageID");
CodeConverter codeConverter = new CodeConverter();
codeConverter.redirectFieldAccess(field, ctClass, "NameID");
ctClass.instrument(codeConverter);
field.setName("NameID");
如果您不知道如何使用Javassist
,请阅读本教程here
关于"重新布线"的诀窍所有字段引用均使用CodeConverter
完成,该CtField
将替换NameID
字段的所有引用,以引用ctClass
中名为NameID
的字段的引用。请记住,在将字段重命名为getMessageID
之前,需要先完成此操作。
但是您应该记住所有引用都已更新,但set / get方法名称仍为setMessageID
和ctClass
。您可以使用CtMethod getter = ctClass.getDeclaredMethod("getMessageID");
getter.setName("getNameId");
CtMethod setter = ctClass.getDeclaredMethod("setMessageID");
setter.setName("setNameId");
的相同引用轻松更改它,如下所示:
?- maplist(nth1(I), [[a,b,c],[1,2,3],[x,y,z]], X).
I = 1,
X = [a, 1, x] ;
...