フィールドのアクセシビリティ フラグを setAccessible() で設定する方法と同様に、リフレクションを使用して Java でフィールドを一時的にするかどうかを指定する簡単な方法はありますか?
2 に答える
1
リフレクション自体はコードを変更できません。
Java エージェントを使用すると、ロード時にクラスを書き換えることができます。
リフレクションを使用してserialPersistentFields
、シリアライゼーション メカニズムがクラス データをキャッシュする前に、リフレクションが存在するかどうかを変更できます (可能性は低い)。バージョン固有の高度な方法でリフレクションを使用して、シリアル化メカニズム内のデータを変更できます。
于 2010-08-02T02:14:16.653 に答える
0
Java API でこれを行う直接的な方法はわかりませんが、JRebel や LiveRebel http://www.zeroturnaround.com/jrebel/comparison/などで可能です。http://asm.ow2.org/の ASM のようなものを使用して、関連するフィールドの一時的な修飾子でバイトコードを書き換えることができます。次に、JRebel/LiveRebel をトリガーして、クラスのランタイム バージョンを置き換えます。
これを ASM で自動化しようとしたことはありませんが、IntelliJ IDEA で JRebel を使用して、インタラクティブな開発中にこのような変更を正常に実行しました。
于 2010-08-02T01:38:46.870 に答える