Groovy-annotations

提供:Dev Guides
移動先:案内検索

Groovy-注釈

_注釈_は、プログラム自体の一部ではないプログラムに関するデータを提供するメタデータの形式です。 注釈は、注釈を付けたコードの動作には直接影響しません。

注釈は主に次の理由で使用されます-

  • コンパイラの情報-エラーを検出したり、警告を抑制するために、コンパイラは注釈を使用できます。
  • コンパイル時および展開時の処理-ソフトウェアツールは、注釈情報を処理してコード、XMLファイルなどを生成できます。
  • 実行時処理-実行時に検査できる注釈がいくつかあります。

Groovyでは、基本的な注釈は次のようになります-

@interface-アットマーク文字(@)は、後に続くものが注釈であることをコンパイラーに示します。

注釈は、ボディとオプションのデフォルト値のない*フォーム*のメソッドでメンバーを定義できます。

注釈は次のタイプに適用できます-

文字列タイプ

文字列の注釈の例を以下に示します-

@interface Simple {
   String str1() default "HelloWorld";
}

列挙型

enum DayOfWeek { mon, tue, wed, thu, fri, sat, sun }
@interface Scheduled {
   DayOfWeek dayOfWeek()
}

クラスタイプ

@interface Simple {}
@Simple
class User {
   String username
   int age
}

def user = new User(username: "Joe",age:1);
println(user.age);
println(user.username);

注釈メンバーの値

注釈を使用する場合、少なくともデフォルト値を持たないすべてのメンバーを設定する必要があります。 例を以下に示します。 アノテーションExampleを定義した後に使用する場合、値を割り当てる必要があります。

@interface Example {
   int status()
}

@Example(status = 1)

クロージャー注釈パラメーター

Groovyのアノテーションの優れた機能は、クロージャーをアノテーション値としても使用できることです。 したがって、注釈はさまざまな式で使用できます。

以下に例を示します。 アノテーションOnlyifは、クラス値に基づいて作成されます。 次に、注釈は2つのメソッドに適用され、number変数の値に基づいて異なるメッセージを結果変数にポストします。

@interface OnlyIf {
   Class value()
}

@OnlyIf({ number<=6 })
void Version6() {
   result << 'Number greater than 6'
}

@OnlyIf({ number>=6 })
void Version7() {
   result << 'Number greater than 6'
}

メタ注釈

これは、Groovyのアノテーションの非常に便利な機能です。 以下に示すように、メソッドに対して複数の注釈を付ける場合があります。 これは、複数の注釈を持つために面倒になる場合があります。

@Procedure
@Master class
MyMasterProcedure {}

このような場合、複数の注釈をまとめたメタ注釈を定義し、メタ注釈をメソッドに適用できます。 したがって、上記の例では、AnnotationCollectorを使用して注釈のコレクションを最初に定義できます。

import groovy.transform.AnnotationCollector

@Procedure
@Master
@AnnotationCollector

これが完了したら、次のメタアノテーターをメソッドに適用できます-

import groovy.transform.AnnotationCollector

@Procedure
@Master
@AnnotationCollector

@MasterProcedure
class MyMasterProcedure {}