2016-06-13 18 views
-1

インスタンス変数 "customerId"の値を取得したい。私はこのフィールドを返すapisのセットを持っています。いくつかのapisでは、このクラスは基本クラスの下にあります。いくつかのケースでは、それはいくつかのレベルのネストされています。インスタンス変数の場所に関係なく、フィールド名 "customerId"で値をフェッチする方法はありますか?Java Reflection - ネストされたクラス内のフィールドの値を取得

例:これははcustomerIdという名前のフィールドと、このフィールドに格納されている値と地図を返します

public static Map<Field, Integer> getFieldWithName(Object o, Map<Field, Integer> list) throws IllegalAccessException { 
    Class<?> c = o.getClass(); 
    for(Field field : c.getDeclaredFields()) { 
     if(field.getName().equals("customerId") && field.getType().equals(int.class)) { 
      list.put(field, field.getInt(o)); 
     } else { 
      if(!field.isAccessible()) { 
       field.setAccessible(true); 
      } 
      getFieldWithName(field.get(o), list); 
     } 

    } 
    return list; 
} 

Customer 
    customerId 

Order 
Customer 
    customerId 

Account 
Order 
    customerId 

答えて

0

これを試してみてください。 G1!

+0

循環参照存在の場合、このコードは例外を生成します。その後、このサイトの名前が付けられます。 'customerId'が' o'のスーパークラスで宣言されている場合も処理しません。そしてそれは 'NullPointerException'になりがちです。 – user3707125

+0

本当に、それを行う方法を示したかっただけです。 – STersteeg

+0

ありがとう、試してみる –

関連する問題