最近私は注釈について読んできましたが、少し混乱しています。私は注釈@NotNullを使用しましたが、変数がnullでないかどうかチェックする方法はわかりません。いいえ、コード内でnullの値をチェックするものは何もありません。インターフェイスなので理にかなっています。実際の処理はどこで行われますか?なぜこの場所がコードで指定されていないのですか?私が見た例では、値を取る注釈を作成するだけですが、何もしないので、実装がどこにあるのか混乱します。注釈の処理はどこで行われますか?
答えて
注釈は単なるメタデータであり、もはやそれほど重要ではありません。 クラスに関するいくつかの詳細を指定する場合は、そのクラスに注釈を付けます。 メタデータを定義する従来のよく知られているXMLの方法の代わりに、(ある程度まで)それらについて考えてみてください。
誰かがあなたのXMLを読んで、メタデータで何かを作るコードを実行するのは明らかです。注釈でも同じことが起こります。注釈が属するフレームワークは、注釈を読み、この情報で何かを作る責任があります。 @NotNull
の場合、そのhibernate-validatorプロジェクト。 javaによって公開されたAPIは、リフレクション(注釈の情報にjava.lang.Class
、Method
、Field
などのようなクラス)でアクセスできます。だから、Hibernateバリデーターの中のどこかに、あなたのクラスに行くコードがあります。リフレクションによってアノテーションを読み、クラスがこれらのアノテーションを遵守しているかどうかをチェックします。 これらのアノテーションには、通常、保持ポリシー 'runtime'があります。これは、それらがバイトコードで保持され、これらのアノテーションを保持するクラスとともにロードされることを意味します。
Javaコンパイラで処理する必要がある注釈もあります。 @Deprecated
、@SuppressWarnings
などのように。そのような注釈を付けることの利点は、コンパイル段階でいくつかのコードの問題を見つけることができることです。
アノテーションプロセッサを配置して、コンパイルフェーズで「プラグイン」することもできますが、全く異なるストーリーです。
これは、アノテーションの使用方法を少し明確にしたいと考えています。
- 1. 注釈処理サードパーティのライブラリ
- 2. Java注釈はいつ処理されますか?
- 3. @ ResourceDependency注釈はいつ処理されますか?
- 4. kapt Android Studioでの注釈処理
- 5. 注釈処理コンパイル手順は
- 6. 注釈のないjava型の処理
- 7. メソッド本体内の注釈の処理
- 8. org.apache.cxf.jaxrs.ext.multipart.Attachmentを処理するスワッガー注釈
- 9. Androidスタジオでの注釈処理がありません
- 10. UILocalNotificationのfireDateでの処理はどのように行われますか?
- 11. Maven注釈処理プロセッサが見つかりません
- 12. 注釈処理環境ですべてのTypeElementsをパッケージに入れることは可能ですか?
- 13. Zend_Form/MVC、どこで準備と処理が行われるべきですか?
- 14. SQLAlchemyのエラー処理 - それはどのように行われますか?
- 15. 注釈 - NSArray - これを行う方法
- 16. 警告:最後のラウンドで作成されたタイプのファイル「[ここに挿入クラスは]」注釈処理
- 17. spring-boot-configuration-processorは注釈付きBeanメソッドを処理しますか?
- 18. FlowtypeでAngularJS $ inject注釈を正しく処理する方法
- 19. javacツールで注釈を処理する方法
- 20. @Guice注釈については、どこで@Guice注釈が見つかりますか。
- 21. JPAの注射はどのように行われますか?
- 22. 注釈の代わりに?
- 23. ロンボク注釈を処理するためにkaptの設定
- 24. データ注釈タグはどこに配置しますか?
- 25. Magento:Authorize.netテストモードで行われた再処理
- 26. Springの注釈付きコントローラのエラー検証を手動で処理します
- 27. 注釈はここでは許可されていません
- 28. 注釈処理とjavapoetで静的メソッドをマージ
- 29. AbstractProcessorのテスト(コンパイル時のJavaの注釈処理)
- 30. 注釈地理algolia symfonyの