質問
Javaでインターフェースに注釈を付けることができるユースケースがわかりません。
誰かが例を挙げてくれないか?
解決
Springで使用して、アノテーションをすべてのサブクラスに適用するインターフェースにアノテーションを付けました。たとえば、Serviceインターフェースがあり、インターフェースの実装が複数あるかもしれないが、注釈に関係なくセキュリティ注釈を適用したいとします。その場合、インターフェースに注釈を付けるのが最も理にかなっています。
他のヒント
例がなくても、説明するのは明確なはずです-インターフェースは振る舞いを記述し、注釈も記述できるため、それらをまとめるのは論理的に一致します。
私が使用しているユースケースはjavax / hibernate Beanの検証です。特定のクラスごとに検証を定義することを回避するためのインターフェイスを使用しています。
public interface IUser {
@NotNull Long getUserId();
...
}
public class WebUser implements IUser {
private Long userId;
@Override
public Long getUserId(){
return userId;
}
...
}
多くの調査ツールでメソッドアノテーションを使用して、ユーザーがプロトコルや制限などを指定して、後で自動チェックを容易に行えるようにしました。
アノテーションは、アノテーションで何ができるかを決定するものではないため、ユーザーがインターフェースにアノテーションを付けることを許可しない正当な理由はありません。
コントラクトスタイルのプログラミングに使用できます-インターフェース(型とメソッド名)を定義するだけでなく、いくつかのセマンティクス(型の内容、前提条件、事後条件)を定義するだけではありません。
Javaで注釈がどのように機能するかを確認する必要がありますが、これはPython注釈で簡単に実行できます...
JBossでアプリケーションをデプロイする場合、インターフェースのアノテーションを使用してjmx-consoleでサービスをエクスポートできます。
RESTインターフェイスを定義するときに使用しました。 RESTeasyを使用すると、注釈付きインターフェイス(この例ではRESTInterfaceV1)を使用するRESTクライアントを作成できます。
final RESTInterfaceV1 client = ProxyFactory.create(RESTInterfaceV1.class, "http://localhost:8080/rest");
アノテーションは実際にRESTインターフェースを実装するオブジェクトに複製する必要がありますが、インターフェース自体はJava RESTクライアントを作成したい人に個別に配布できます。
インターフェイスを実装するクラスが持つべきMutabilityコントラクトをサブクラスの開発者に明確に示すために、インターフェイスを@Immutableでマークします。 gehelが言うように、契約によるプログラミング。