22

独自の注釈を作成しました。これをリフレクションを介して使用して、コードで決定を下します。注釈には、その唯一の要素に設定されたデフォルト値があります。リフレクションを介してデフォルト値にアクセスする方法はありますか?

PageableRequestMapping.java (注釈)

package org.tothought.controllers.annotations;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface PageableRequestMapping {
    String variablePath() default "/";
}

デフォルト値を取得する疑似コード

private int parsePageNumber(StringBuffer requestURL,
        PageableRequestMapping pageableRequestMapping) {

        String variablePath = pageableRequestMapping.variablePath();

    //Psuedo code doesn't work in Java, included to illustrate intentions   
        if(variablePath.equalsIgnoreCase(pageableRequestMapping.variablePath().default())){
           //handle default case    
        }else{
          //handle different case
        }
        return 0;
}

この問題に関する私の調査では、例が見つかりませんでした。この値は、クラスを介して静的な方法でアクセスできると理論付けましたが、アクセスできません。だから私は2つの質問が残っています。

  • 注釈内の要素のデフォルト値を取得することは可能ですか?
  • もしそうなら、どのように?

また、この値をハードコーディングできることはわかっていますが、プログラムをもう少し堅牢にしたいと考えています。

4

2 に答える 2

29

リフレクションを使用して Method オブジェクトを取得し、 を利用できますMethod#getDefaultValue()

Method method = pageableReqMapping.annotationType().getMethod("variablePath");
String variablePath = (String) method.getDefaultValue();

具体的な例を次に示します。

public class AnnotationTest {

  public static void main(String[] args) throws Exception {
    Class<?> clazz = Annotation.class;
    Method method = clazz.getDeclaredMethod("value");
    String value = (String) method.getDefaultValue();
    System.out.println(value);
  }

  public @interface Annotation {
    String value() default "default value";
  }
}
于 2012-11-10T17:45:33.610 に答える
1

クラスにアノテーションを適用し、リフレクションを介してクラスから取得することで、このようにすることができます。

@PageableRequestMapping
class MyUtilClass{
}


public String getDefaultValue(){
    PageableRequestMapping pageableRequestMapping = MyUtilClass.class.getAnnotation(PageableRequestMapping.class);
    return pageableRequestMapping.variablePath();
}
于 2012-11-10T17:45:11.723 に答える