Исключение при получении значения поля Integer с использованием Reflection - PullRequest
0 голосов
/ 16 апреля 2019

Я на JDK 1.8 и пытаюсь получить значение поля, которое помечено как Целое , а не int .

Я могуНе изменяйте тип данных на int, потому что этот класс используется Lucene и OR / M, поэтому я могу использовать Reflection только для игры с ним

private Integer fee;

public Integer getFee() {
    return fee;
}

public void setFee(Integer fee) {
    this.fee = fee;
}

Когда я делаю следующее:

Field field = myClass.getClass().getDeclaredField("fee");
field.setAccessible(true);
Integer fee = field.getInt(myInstance);

Я получаю это исключение:

java.lang.IllegalArgumentException: 
Attempt to get java.lang.Integer field "com.xyz.models.MyModel.fee" 
with illegal data type conversion to int

1 Ответ

4 голосов
/ 16 апреля 2019

Две проблемы:

  • Это не int, поэтому не используйте getInt.Используйте get и разыграйте его.
  • Вы передаете строку "плата", где он ожидает некоторый экземпляр класса

Field field = Foo.class.getDeclaredField("fee");
field.setAccessible(true);
Integer fee = (Integer) field.get(someInstance);

Учитывая, что вашкласс уже имеет геттер, я не понимаю, почему вам нужно получить доступ к этому полю через отражение.Просто используйте someInstance.getFee().

...