問題の歴史:
アノテーションはJava 5で導入され、プログラムのロジックを変更せずにバイトコードにメタ情報を追加するためのものです。アノテーションを使用することで、クラスやメソッドにフレームワークやコンパイラ、パーサー用の追加情報を簡単に提供できます。
問題:
設計が不十分なアノテーションや誤って使用されたアノテーションは、コードの保守を複雑にします。時折、開発者はアノテーションの適用可能性を混同したり、自分のアノテーションを作成する方法が分からなかったり、パラメータ付きのアノテーションを作成する可能性を理解できなかったりします。
解決策:
自分のアノテーションを作成する:
import java.lang.annotation.*; @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyTest { String value() default ""; }
アノテーションの使用:
public class TestClass { @MyTest("Example") public void testMethod() {...} }
主な特徴:
アノテーションは他のアノテーションから継承できますか?
答え: いいえ、Javaのアノテーションは互いに継承をサポートしていません。
アノテーションの動作をクラスのすべての子孫に義務付けることはできますか?
答え: 直接にはできません。リフレクションを使用してアノテーションの存在をチェックし、その制御を手動で実装する必要があります。
@Retention(Class)と@Retention(RUNTIME)の違いは何ですか?
答え:
プロジェクトでXMLによる設定をアノテーションに置き換えましたが、@Retention(RUNTIME)を追加しませんでした。
利点:
欠点:
ビジネスオペレーションの監査を制御するカスタムアノテーション@Auditをメソッドに設定し、サーバー上でのロジックの実際の呼び出しにリフレクションを使用しました。
利点:
欠点: