Как преобразовать значения POJO в массив объектов - PullRequest
0 голосов
/ 17 января 2019

У меня есть класс поё

public class Person {
    private int id;
    private String name;
    private String address;
    private int salary;
    // getter and setter
}

Я хочу преобразовать значение этого объекта класса pojo в массив объектов как;

Object[] perObjArray = new Object[4];
empObjArray[0] = personObjcet.getId();
empObjArray[1] = personObjcet.getName();
empObjArray[2] = personObjcet.getAddress();
empObjArray[3] = personObjcet.getSalary();

Как и в этом сценарии, у меня есть другие классы pojo.Я хочу создать универсальный метод, где я могу передать объект Pojo, и он будет возвращать массив объектов этих значений.

Я знаю, что мы можем использовать отражение, но не знаете, как?Пожалуйста, помогите ..

1 Ответ

0 голосов
/ 17 января 2019

Вы можете решить это с помощью отражения

public Object[] getObjectArray(Person person) throws NoSuchAlgorithmException, IllegalArgumentException, IllegalAccessException {
   Field[] fields = person.getClass().getDeclaredFields();
   int fieldCount = fields.length;
   Object[] objArr = new Object[fieldCount];

   for (int i = 0; i < objArr.length; i++) {
     Field field = fields[i];
     field.setAccessible(true);

     objArr[i] = field.get(person);
   }

   return objArry;
}

чтобы сделать это через геттеры, вы также можете сделать следующее через отражение

public Object[] getObjectArray(Person person) throws NoSuchAlgorithmException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
   Method[] methods = person.getClass().getMethods();

   List<Method> getters = new ArrayList<>();
   for (Method m : methods) {
     if (isGetter(m)) {
       getters.add(m);
     }
   }

   Object[] objArr = new Object[getters.size()];
   for (int i = 0; i < getters.size(); i++) {
     Method m = getters.get(i);
     objArr[i] = m.invoke(person); 
   }

  return objArr;
}

public static boolean isGetter(Method method){
    if(!method.getName().toLowerCase().startsWith("get")) return false;
    if(method.getParameterTypes().length != 0)   return false;  
    if(void.class.equals(method.getReturnType()) return false;
    return true;
}

Убедитесь, что вы выполнили все необходимые проверки на ноль и обработку ошибок.

Второй метод получит все ваши общедоступные методы получения в вашем классе и вызовет их для получения значения.

Это также предполагает, что все ваши геттеры, начинающиеся с "get", могут корректироваться в соответствии с вашими потребностями.

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