2

ソースコードをクラスファイルにコンパイルする前に、何かを追加したい(例:メソッドやフィールドの追加)。しかし、私はそれを行う方法がわかりません。それができる方法はありますか?

私はあるオープンソースプロジェクトLombokを知っています。それは、setterとgettersメソッドをクラスに自動的に追加でき、IDE(eclipse)は今すぐに新しく追加されたメソッドを見つけることができます。それで、誰かがそれがどのように達成したかを私に言うことができますか?

4

1 に答える 1

3

lombokのソース コードは github にあります。Afaikは、javacアノテーション処理機能の内部APIを使用しています。注釈プロセッサは、現在コンパイルされているファイルを変更することはできず、新しいファイルを作成できることのみが想定されています。型キャスト、クラスローダーへのパッチ適用、およびいくつかのメソッドのオーバーライドにより、lombok は現在コンパイル中の Java ファイルの抽象構文ツリーを変更し、メソッドまたはソース コードを追加できます。それは機能しますが、私はそれをハックと見なし、あまり依存しません。

作成したクラスファイルを変更したい場合は、cglibasmなどのバイトコード書き換えフレームワークが、私の意見ではよりクリーンなソリューションです。

于 2013-03-12T10:48:46.443 に答える