/ / Reflect Field setValue pre vnútorný objekt - java, odraz

Reflection Field setValue pre vnútorný objekt - java, odraz

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ď č. 1

Musí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.