2016-03-29 19 views
0

注釈値を取得しようとしています。これは私のシナリオです。Javaの汎用インターフェースの注釈値を取得する

これは私が宣言した注釈です。

@Retention(RetentionPolicy.RUNTIME) 
public @interface PluginMessage { 
String name(); 
String version(); 
} 

これは、次のコードスニペットで使用される汎用的なインタフェースであり、いくつかの値に対してアノテーションを使用

@PluginMessage(name = "RandomName", version = "1") 
public class Response{ 
private Date Time; 
} 

クラスです。

public interface ResponseListener<E> { 
    void onReceive(E response); 
} 

私は、次のコードを呼び出すことによって、これを起動します。

addListener(new ResponseListener<Response>() { 
     @Override 
     public void onReceive(Response response) { 
     System.out.println(); 
     } 
    }); 

これはaddListenerメソッドの実装です:

public <E> void addListener(ResponseListener<E> responseListener) { 
    Annotation[] annotations = responseListener.getClass().getAnnotations(); 

} 

注釈が常に空になっているか、何Iの任意のアイデア間違っている?私はここで彼らの価値を得ようとしています。

+3

ResponseListenerには注釈がありません。応答はありません.2つの間には関係はありません。 – pczeus

答えて

1

あなたはここに注釈を取得することがあります。

.addListener(new ResponseListener<Response>() { 
     public void onReceive(Response response) { 
      final Annotation[] annotations = response.getClass().getAnnotations(); 
      for (Annotation annotation : annotations) { 
       System.out.println("annotation.toString() = " + annotation.toString()); 
      } 
     } 
    }); 

あなた.addListener実装では意味がありません。 ResponseListener(注釈を持たない)から注釈を取得する代わりに、リスナープールにリスナーを追加する必要があります。次に、応答を受け取るときに、各リスナーに対してlistener.onReceive(...)に電話する必要があります。そのようなものがそこに実装されるべきだと私は信じています。

+1

@Andrejは '.getAnnotations()'呼び出しを 'Response'クラスで呼び出すよう変更しましたが、' ResponseListener'では呼び出さないことに注意してください。これはあなたの問題を解決する鍵です。 – pczeus

関連する問題