2014-09-27 2 views
0

Пусть, скажем, например, у меня есть сотрудник класса POJO с тремя атрибутамипрограммно извлекает объекты POJO?

1.Name (String) 2.Location (String) 3.Date рождения (Дата)

тогда я уволена запрос в базу данных, которая извлекать первую строку таблицы и заполнить эту POJO с данными таблицы следующим образом: -

Имя - джон расположения - США Дата рождения - 27/09/2014

Чтобы получить значения из этого POJO, мне нужно вызвать getName(), getLocation() и getDOB().

Но есть ли способ, с помощью которого я могу получить все значения, является магазин в POJO, в массиве типа Object, не используя метод получения

, например:

Object[0] has the value "John". 
Object[1] has the value "USA". 
Object[2] has the value "27/09/2014". 

(В моих case, в классе около 80 атрибутов, и число этих атрибутов увеличивается из-за требований клиента, и я извлекаю каждое значение методом getter и каждый раз, когда добавляется один атрибут, мне нужно написать метод getter в коде, чтобы fetch values. Я в основном хочу более динамичное решение этой проблемы.)

+0

Вы отметили это как «отражение», что означает, что вы уже знаете, что отражение здесь является опцией. –

+0

Какова цель получения информации в виде массива объектов? Вам нужно будет использовать массив '(String) [1]', чтобы получить местоположение (и молитесь, чтобы местоположение действительно находилось в индексе 1 и действительно является строкой) вместо 'user.getLocation()'. В чем преимущество? –

+0

@OliverCharlesworth Я пробовал отражение, но проблема в том, что он позволяет вам получить определение класса, например имя метода или имя атрибута. То, что я ищу, - это метод, с помощью которого я могу использовать значения, которые хранятся в атрибутах. Я думаю, что отражение не имеет такой функциональности. – Tairman

ответ

0

вы можете попробовать это:

String[] getObjectsPublicMethods(Object o) 
{ 
    Class clazz = o.getClass(); 
    Method[] methods = clazz.getDeclaredMethods(); 
    String[] result = new String[methods.length]; 
    for (int i=0; i<methods.length; ++i) 
    { 
     try 
     { 
      result[i] = (String) methods[i].invoke(o, new Object[] {}) 
     } catch (IllegalAccessException e) 
     { 
      e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. 
     } catch (InvocationTargetException e) 
     { 

     } 
    } 
    return result;   
} 

Этот метод использует отражение, чтобы получить информацию, которую вы хотите, НО он предполагает, что методы getter объявляются общедоступными в этом классе AND , что все общедоступные методы возвращают String.

+0

Эй, спасибо, вы решили мою проблему. – Tairman

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