2017-06-30 16 views
2

は、ソースコードは、注釈の値を取得する方法述語参照から注釈値を取得する方法は?ここ

@Retention(RetentionPolicy.RUNTIME) 
public @interface PredicateMeta { 
    String name(); 
    int data(); 
    String operator(); 
} 

public class AnnotationTest { 
    public static void main(String[] args) { 

     Predicate p = getPred(); 
     // how to get annotation values of data, name and operator?? 
    } 


    public static Predicate getPred() { 
     @PredicateMeta(data = 0, name = "name", operator = "+") 
     Predicate p = (o) -> true; 
     return p; 
    } 
} 

のですか?

また、カプセル化されたフィールドの値を使用するよりも、アノテーションを使用して実行時に遅くなるでしょうか?

答えて

3

ラムダではこれを行うことはできません。

p.getClass().getAnnotatedInterfaces()を取得しようとすると、注釈が表示されません。

これは、この作品を作るための唯一の方法である:すべての

まず、あなたの注釈を与える必要があります@Target(ElementType.TYPE_USE)

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.TYPE_USE) 
@interface PredicateMeta { 
    String name(); 
    int data(); 
    String operator(); 
} 

その後、匿名クラスを使用しますので、お電話の際

public static Predicate getPred() { 
      return new @PredicateMeta(data = 0, name = "name", operator = "+")Predicate() { 
       @Override 
       public boolean test(Object o) { 
        return true; 
       } 
      }; 
     } 

をこれにより、アノテーションとそのパラメータを取得できます。

p.getClass().getAnnotatedInterfaces()[0].getAnnotation(PredicateMeta.class) 
関連する問題