我正在处理需要类的检测的项目。我使用javassist
,因为在我的情况下做仪器非常方便。javassist:重命名类和字段类型
我面临一个问题,可以使用下面的代码段来描述:
假设第1类:
public class Class1 {
Class2 class2;
}
和2类:
public class Class2 {
//Code
}
而对于一个功能从定义的类中获取CtClass
,并进行一些代码转换。
public void testFunction() throws NotFoundException {
ClassPool classPlool;
classPlool = ClassPool.getDefault();
CtClass ctCls1 = classPlool.getAndRename("Class1", "Class1_V1");
// instrument and load ctCls1 etc.
CtClass ctCls2 = classPlool.getAndRename("Class2", "Class2_V1");
// instrument and load ctCls1 etc.
}
至于,我重命名类,所以在Class1
领域Class2 class2
是class Class2
类型,但该类被重命名为Class2_V1
。我想将字段类型也从LClass2
重命名为LClass2_V1
。
的ctCls1
是:[email protected][changed public class Class1_V1 fields=Class1_V1.class2:LClass2;, [email protected][public Class1_V1()V], methods=]
PS:我已经加载的不同仪器类两个版本,所以这是在我的情况的最佳途径。此外,我已经搜索了这个问题,但没有解决方案来解决它,例如this link描述了重命名字段,但没有键入。
请注意,我总是追加“_V1”或“_V2 ”。所以,如果你帮我重命名'LClass1_V1'或'LClass1_V2'就足够了。 – Aadarsh
你不能完全删除该字段,然后添加一个新的字段与新的名称和新的类型? – Nicholas
我可以,但删除然后添加并使用'setType()'没有区别 – Aadarsh