2015-06-19 2 views
0

У меня есть небольшая проблема. Я написал функцию, которая должна генерировать таблицу для списка объектов (она может быть Date или custom one or whatkver). Параметрами этой функции являются «Список списка» и «Заголовки списков». Итак, вот вопрос, почему эта линияПолучение экземпляра объекта?

if (value.getClass().isInstance(Date.class) ... 

не задействуются, даже ты, когда я печатаю value.getClass() это говорит: класс java.util.Date. Также вопрос, как проверить, является ли «значение» List? Большое спасибо заранее :)

Вот часть кода:

for (Object o : list) { 

    List<String> atributes = new ArrayList<String>(); 

    for (java.lang.reflect.Field field :o.getClass().getDeclaredFields()) { 
     field.setAccessible(true); 
     Object value = field.get(o); 
     if (value != null) { 
      if (value.getClass().isInstance(Date.class)) { 
       atributes.add(convertDateToString((java.util.Date) value)); 
      } 
      atributes.add(value.toString()); 
     } 
     } ... 
+0

Что вы имеете в виду, когда говорите, что линия не выполняется? Вы имеете в виду, что он всегда возвращает ложь? – ApproachingDarknessFish

+0

Да, извините за плохое выражение :) –

+0

Потому что 'Date.class' не является экземпляром' Date'. – immibis

ответ

3

Вы злоупотребляя Class#isInstance, которая возвращает истину, если Date.class является экземпляром value.getClass():

Определяет, является ли указанный объект присвоения совместим с объект, представленный этим классом. Этот метод является динамическим эквивалентом оператора Java instanceof. Метод возвращает true, если указанный аргумент Object не является нулевым и может быть передан ссылочному типу, представленному этим объектом класса, без повышения класса ClassCastException. В противном случае он возвращает false.

Скорее всего, вы хотите, либо:

if(value instanceof Date) 

или

if(Date.class.isInstance(value)) 
+0

Большое спасибо :) –

+0

@HansJohanbach Нет проблем, не стесняйтесь отмечать галочку, если верите, что этот ответ помог вам полностью. – hexafraction

0

value.getClass().isInstance(Date.class) спрашивает Date.class, который имеет тип Class является экземпляром класса, который является назначьте совместим с классом value. То есть false, если value не является экземпляром Class или Object.

Используйте оператор instanceof вместо:

if (value instanceof Date) … 
3

Правильный способ проверить, если объект является экземпляром некоторого класса является использование "InstanceOf" заявление.

Таким образом, вы должны делать это:

if (value instanceof Date) { 
    atributes.add(convertDateToString((java.util.Date) value)); 
} 

Надеется, что это поможет.

Смежные вопросы