java - 如何将 POJO 值转换为对象数组

标签 java reflection

我有 pojo 类;

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 对象,它将返回这些值的对象数组。

我知道我们可以使用反射,但不确定如何使用?请帮忙..

最佳答案

你可以通过反射来解决这个问题

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;
}

要通过 getter 执行此操作,您也可以通过反射执行以下操作

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;
}

确保进行必要的空检查和错误处理。

第二种方法将获取类中所有可公开访问的 getter 并调用它们来检索值。

这还假设所有以“get”开头的 getter 可能必须根据您的需要进行调整。

关于java - 如何将 POJO 值转换为对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54236841/

相关文章:

c# - String.IndexOf 方法的表达式树

java - 与 Maven 父模块中的 Checkstyle 和 PMD 配置的区别

java - 查找一个字符串并显示行号和行本身?

java - 提示用户在 Java 中输入是或否

java - 如何改进代码设计以消除 Java 中对 'instanceof' 的需要?

reflection - Ninject 注入(inject)到通过反射构造的对象中

java - 如何创建具有多个静态库的 JNI Android Studio 项目

java - 如何获取用户的访问 token ?

Scala 泛型函数混淆

C# : propertyinfo always empty