私は最近注釈について読んでいます、そして私は少し混乱しています。アノテーション@NotNullを使用しましたが、変数がnullでないかどうかをチェックする方法がよくわかりません。コードのどこにもnullの値をチェックするものはありません。それはインターフェースなので、それは理にかなっています。実際の処理はどこで行われ、なぜこの場所がコードで指定されていないのでしょうか。私が見た例は通常、値をとる注釈を作成するだけですが、他には何もしません。そのため、実装がどこで行われるかについて混乱しています。
1 に答える
注釈は単なるメタデータであり、それ以上でもそれ以下でもありません。クラスに関する詳細を指定する場合は、注釈を付けます。メタデータを定義するための古いよく知られたXMLの方法の代替として、それらを(ある程度)考えてください。
これで、誰かがXMLを読み取り、メタデータを使用して何かを作成するコードを実行することは明らかです。注釈についても同じことが起こります。注釈が属するフレームワークは、注釈を読み取り、この情報を使用して何かを作成する責任があります。の場合@NotNull
、その休止状態のバリデータープロジェクト。Javaによって公開されるAPIを使用すると、リフレクション(、、、などのクラス)によってアノテーション内の情報にアクセスできjava.lang.Class
ます。したがって、Hibernateバリデーター内のどこかに、クラスに移動し、リフレクションによってアノテーションを読み取り、クラスがこれらのアノテーションに準拠しているかどうかを確認するコードがあります。これらのアノテーションには通常、保持ポリシー「ランタイム」があります。これは、これらがバイトコードに保持され、これらのアノテーションを保持するクラスとともにロードされることを意味します。Method
Field
Javaコンパイラで処理する必要のある注釈もあります。のよう@Deprecated
に、@SuppressWarnings
など。このようなアノテーションを付けることの利点は、コンパイル段階でいくつかのコードの問題を見つけることができることです。
注釈プロセッサを配置して、コンパイルフェーズ中にそれらを「プラグイン」することもできますが、まったく別の話です。
これにより、注釈の使用法が少し明確になることを願っています