私はクラスのインストルメンテーションが必要なプロジェクトに取り組んでいます。私は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:私は別の計測器でのクラスの2つのバージョンをロードするようにしましたので、私の場合は最良の方法です。また、私は問題を探しましたが、それに対処する解決策はありません。this linkはフィールドの名前を変更すると説明しますが、タイプは記述しません。 Javassist
documentationによると
を通してそれを得る私はいつも「_V1」または「_v2を追加することに注意してください'だから、あなたが 'LClass1_V1'や 'LClass1_V2'の名前を変更するのを手助けすれば十分でしょう。 – Aadarsh
フィールドを完全に削除してから、新しい名前と新しいタイプのフィールドを追加できませんか? – Nicholas
'setType()'の追加と削除の違いはありません – Aadarsh