Java8
java
1@Target(ElementType.FIELD) 2@Retention(RetentionPolicy.RUNTIME) 3public @interface An { 4 String x() default "OK"; 5} 6 7public static class AA { 8 @An 9 String XX; 10} 11 12public static void main(String[] args) { 13 14}
すみません、質問です。
アノテーション An の x をリフレクションで取りたいんですけど方法ありますか?
もちろん、"x" を固定で指定せず、すべて Field, Method などを使って、An に定義されているアノテーション一覧を
取りたいです。
インターフェースの拡張なので、RUNTIME時点で、プロキシーが介入するため、
java
1public class AnoTest { 2 3 @Columns(id = "DFL") 4 private Double val = 12.5; 5 6 public static void main(String[] args) throws Throwable { 7 8 AnoTest ano = new AnoTest(); 9 10 Field f = ano.getClass().getDeclaredField("val"); 11 12 System.out.println("-------- annotation.toString."); 13 Columns c = f.getAnnotation(Columns.class); 14 15 System.out.println(c); 16 17 System.out.println("-------- fields."); 18 for (Field ff : c.getClass().getDeclaredFields()) { 19 System.out.println(ff); 20 21 } 22 System.out.println("-------- methods."); 23 24 for (Method m : c.getClass().getMethods()) { 25 26 27 System.out.println(m + " => Decl => " + m.getDeclaringClass()); 28 29 } 30 31 32 } 33 34} 35
これでやると、最後の system.out でやまほどメソッドが出てくるのですが、$Proxy1 を固定で参照するのはイマイチです。固定で、つまり、"$proxy." で始まるメソッド定義のメソッド名、で取るのは最後の手段としたいです。
よろしくお願いします。
最終的には、JSON 配列になります。
Columns.java
java
1@Target(ElementType.FIELD) 2@Retention(RetentionPolicy.RUNTIME) 3public @interface Columns { 4 // Requires 5 String id(); 6 7 // Options 8 String enShortNm() default ""; 9 String enLongNm() default ""; 10 String jpShortNm() default ""; 11 String jpLongNm() default ""; 12 String prefix() default ""; 13 String suffix() default ""; 14 15} 16

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。