24

コードを生成するためのソリューションを探しています。私はグーグルで検索し、SOといくつかのブログを検索しましたが、良い解決策が見つかりませんでした.

クラスに注釈を付けたいのですが、コンパイル時にいくつかのメソッドとプロパティがクラスに自動的に追加されます。

私が探しているソリューションの重要なポイント:

  • カスタマイズ可能な生成コード (必須)
  • 外部ツールなどaptを呼び出す必要はありません (必須)
  • JDK のみ、サードパーティ フレームワークなし (必須オプション)
  • 注釈名のカスタマイズ可能 (オプション)

例えば ​​:

@Aliasable
public class MyClass {
//Some properties

// Contructor ...

// Some methods
}

コンパイル後、私のクラスは次のようになります。

public class MyClass {
   //Some properties
   private String alias;

   // Contructor ...

   // Some methods
   public String getAlias() {
      return alias;
   }

   public void setAlias(String alias) {
      this.alias=alias;
   }
}

編集:
最後に、3 番目の要件を MANDATORY から OPTIONAL に変更し、プロジェクト Lombokを選択しました(Maven および Eclipse との統合は簡単で、使用するための作業はほとんどありません)。

4

3 に答える 3

16

注釈処理ツールはバージョン1.6からjavacに統合されており、JDKの一部ですしたがって、 Pluggable Annotation APIを使用する場合、外部ツールは必要ありません。Mirror APIを使用して、カスタムアノテーションまたはメソッド/パラメーター/フィールド/クラス宣言を分析することにより、任意のコードを生成できます。

アノテーションプロセッサAPIは、既存のクラスを変更してはならないと言っています。代わりに、既存のクラスのサブクラスを生成し、それらのサブクラスに拡張メソッドを作成する必要があります。

とにかくクラスを変更することは可能であるようですが(たとえば、バイトコード操作ライブラリを使用することによって)、仕様とは対照的であり、他のアノテーションプロセッサで問題が発生する可能性があり、すべてのコンパイラで同じように機能するとは限りません。

于 2011-09-09T15:35:54.657 に答える
13

ProjectLombokをご覧ください。あなたが書くときにあなたが尋ねるようにそれはコードを生成します:

public class MyClass {
  @Getter @Setter private String alias;
}

また、必要に応じてさらに多くのことを行います。外部ツールを要求しなかったのは知っていますが、基本的にはこれを再現します。

于 2011-09-10T11:02:15.500 に答える
3

XMLとXSLTを使用してコードを生成します。これは、ビューのEJB、ロジック、およびCRUD部分に使用されます。実行時に生成されるのではなく、ビルドサーバー上で生成されます。開発者は、適切な開発目的でコードを手動で生成できます。これは、ANTがビルドサーバーで使用するのと同じコマンドで実行されます。

生成はXMLとXSLTを使用するため、高度にカスタマイズできます。

あなたがグーグルJava code generation with XSLTすると、あなたはたくさんの例に出くわすでしょう。この手法は2000年までさかのぼります。したがって、おそらく今ではより簡単な解決策が先行していることに注意してください。

于 2011-09-09T13:57:17.167 に答える