Отражение Java isArray () всегда ложно - PullRequest
0 голосов
/ 16 июня 2009

У меня возник вопрос о Java Reflections: мне нужно оформить заказ, если определенное поле класса является массивом. Но моя проблема: если я запускаю isArray () для атрибута класса напрямую, это работает. Но если я воспользуюсь приведенным ниже способом, он не будет работать. Я думаю, потому что «настоящий» массив находится в этом классе Field? Любая идея, как заставить это работать - я думаю, что там отсутствует актерский состав или что-то подобное? Спасибо!

Field fields[] = object.getClass().getDeclaredFields();

for (Field field : fields) {
    if (field.getClass().isArray()) {
        //Always false.
    }
}

Ответы [ 3 ]

7 голосов
/ 16 июня 2009
4 голосов
/ 16 июня 2009

Ваш код должен читать

Field fields[] = obj.getClass().getDeclaredFields();

for(Field field : fields) {
  if(field.getType().isArray()){
     //Actually works
  }
}

При использовании field.getClass (), как вы есть, всегда будет возвращаться Field.class или экземпляр Class подкласса Field *.

* Мои извинения за такое запутанное предложение.

0 голосов
/ 16 июня 2009

Вы тестируете отдельные элементы полей, а не сам массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...