我正在處理需要類的檢測的項目。我使用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