Groovy-annotations
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 {}