前提・実現したいこと
アノテーションをつけることで、フィールドに設定した値も取得できるようにしたいです。
具体的に、名前と性別のフィールドにアノテーションをつけて、Taro、Maleとgetterを使わなくても値の出力を行おうとしています。
しかし、ソース書いている段階でコンパイルエラーが出てしまい、困っています。
やりたいことを実現できるのなら、必ずしもコンパイルエラーの解決はできなくても大丈夫です。
どうか、ご助力をお願いします!
発生している問題・エラーメッセージ
以下のコンパイルエラーが Main.java の f.get(person) で出てしまっています。
Unhandled exception: java.lang.IllegalAccessException
アノテーション
java
1Test.java 2@Retention(RetentionPolicy.RUNTIME) 3@Target (ElementType.FIELD) 4public @interface Test{ 5 String val(); 6}
java
1Person.java 2 3@Getter 4@Setter 5public class Person { 6 @Test(val="name") 7 private String name; 8 9 @Test(val="gender") 10 private String gender; 11 12 private int age; 13}
java
1Main.java 2 3public class Main { 4 public static void main(String args[]) { 5 Person person = new Person(); 6 person.setName("Taro"); 7 person.setGender("Male"); 8 9 Field[] fields = person.getClass().getFields(); 10 11 for (Field f : fields) { 12 if(f.isAnnotationPresent(Test.class)) { 13 String val = f.getAnnotation(Test.class).val(); 14 String result = f.get(person).toString(); 15 System.out.println(val + ": " + result); 16 } 17 } 18 } 19}
期待結果
Name: Taro
Gender: Male
###試したこと
getAnnotationやgetannotationsbytypeのメソッド調べて、色々やってみようとしましたが、どうにも上手くいかずです....。
原因がなにかもイマイチよくわかっておらず、八方塞がりです。
###利用環境
IDE: intellij
jdk: java11
Framework: Spring Boot
回答1件
あなたの回答
tips
プレビュー