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));
konzola:
Exception in thread "main" java.lang.IllegalArgumentException: Can not set
java.math.BigDecimal field com.company.Account.amount to java.lang.reflect.Field
Ako nastaviť hodnotu na účet.
odpovede:
3 pre odpoveď č. 1Musíte vytvoriť objekt typu Account
, vyplňte ho (priamo alebo prostredníctvom odrazu) a pomocou neho nastavte account
vašej oblasti User
inštancie.
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);
Ako vždy, javadoc vysvetľuje ako Field#set(Object, Object)
funguje.
Nastaví pole reprezentované týmto
Field
objekt na zadanom argument objektu na zadanú novú hodnotu. Nová hodnota je automaticky rozbalené, ak má podkladové pole primitívny typ.