内部对象的反射场setValue

时间:2014-12-25 16:50:25

标签: java reflection

class User{
  Account account;
  String name; 
}

class Account {
  Integer amount;
}


**main :**
        User u = new User();
        Field field = u.getClass().getDeclaredField("account");
        field.setAccessible(true);
        Field amount = field.getType().getDeclaredField("amount");
        amount.set(field, new Integer(1000));

console:

 Exception in thread "main" java.lang.IllegalArgumentException: Can not set
 java.math.BigDecimal field com.company.Account.amount to java.lang.reflect.Field

如何将值设置为帐户。

1 个答案:

答案 0 :(得分:3)

您需要创建Account类型的对象,填充它(直接或通过反射)并使用它来设置account实例的User字段。

User u = new User();

Field field = u.getClass().getDeclaredField("account");
field.setAccessible(true);  

Account account = new Account();
account.amount = new Integer(1000);

field.set(u, account);

与往常一样,javadoc解释了Field#set(Object, Object)的工作原理。

  

设置指定的此Field对象所表示的字段   对象参数指定的新值。新的价值是   如果基础字段具有基本类型,则自动解包。