ジェネリックを使用している場合、コンパイル時にクラスに特定のアノテーションが含まれているかどうかを確認できますか?バインドされたタイプを指定するコンパイル時に注釈を含むパラメータ?
さまざまなHTTP呼び出しに対する応答となるラッパークラスを作成しています。
私が望むのは、このラッパークラスが、ユーザーが自分の注釈で注釈を付けられた任意の型のオブジェクトを渡すことができるようにすることです。
たとえば、次のように私のラッパークラスを指定できます
このクラスを使用するときは、私は新しいHttpResponseオブジェクトを作成し、「データ」フィールドの型を宣言することができますpublic class HTTPResponse<T> {
private HttpStatus status;
private int statusCode;
private T data;
public HTTPResponse(HttpStatus status, T data) {
this.status = status;
this.statusCode = status.value();
this.data = data;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
//other getters/setters
}
を:
HTTPResponse<SomePOJO> response = new HTTPResponse<>(HttpStatus.OK, new SomePOJO());
は、
考えられるのは、このクラスを使用しようとする人は誰でも、構築中に独自のカスタムPOJOを渡すことができるということです。しかし、私は、作成中に渡されているオブジェクトに、私が作成したカスタムインターフェイスが注釈されていることを確認できるようにしたいと考えています。
例えば、私のSomePOJOクラスは、以下のように見えるためにを必要とします:
@MyCustomInterface
public class SomePOJO() {
//code stuff here
}
SomePOJOクラスがコンパイル時に@MyCustomInterfaceでアノテートされていることを確認する方法はありますか?
私は注釈をマークして、実行時に利用できるようにしてから、HTTPResponseクラスのコンストラクタでチェックを実行することができます。しかし、私のクラスのユーザが、(コンパイル時に)できるだけ早く正しいインタフェースをPOJOにマークしていないので、HTTPResponseオブジェクトを作成する前にそれを行う必要があることを本当に知りたいです。
この場合、アノテーションは適切な方法ですか?それは何とかコンパイル時にクラスのアノテーションを確認するために、100%不可能であると私は、あなたがこれまでダウンし、それがこの作ることに成功した場合に読み取るための
HTTPResponse with public class HttpResponse<T implements MyCustomInterface> {
//fields, getters, setters
}
感謝を指定して、私のカスタムインターフェイスを実装するためにユーザーを強制すべきです!