Java动态创建实例变量的对象数组

标签 java arrays object reflection

我有几个 pojo,其实例变量需要转换为对象数组。我正在尝试找到一种可以动态处理此问题的方法,而不是在每个 pojo 中添加 toObjectArray() 方法。

这是一个带有 toObjectArray() 方法的示例类,我想删除它:

public class Contact {

  private String lastName;
  private String firstName;

  public String getLastName() {
    return lastName;
  }

  public void setLastName(String lastName) {
    this.lastName = lastName;
  }

  public String getFirstName() {
    return firstName;
  }

  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }

  public Object[] toObjectArray() {
    return new Object[] {
      this.getLastName(),
      this.getFirstName(),
    };
  }

}

实例变量不必按顺序返回。我有一个自定义注释,它允许我反射(reflect)对象数组的正确顺序。我只是想知道是否可以动态迭代对象的实例变量和值以创建对象数组。

类似这样的事情...

public static Object[] toObjectArray(Object obj) {
  /// cast Object to ?
  /// iterate instance variables of Contact
  /// create and return Object[]
}

public static void main(String[] args) {
  Contact contact = new Contact();
  contact.setLastName("Garcia");
  contact.setFirstName("Jerry");

  Object[] obj = toObjectArray(contact);
}

任何帮助将不胜感激。如果我需要更清楚,请告诉我。

谢谢!

最佳答案

一种可能的方法是使用反射。

static <T> Object[] getFieldValues(final Class<T> type, final T instance) {

    final Field[] fields = type.getDeclaredFields(); // includes private fields

    final Object[] values = new Object[fields.length];

    for (int i = 0; i < fields.length; i++) {
        if (!fields[i].isAccessible()) {
            fields[i].setAccessible(true); // enables private field accessing.
        }
        try {
            values[i] = fields[i].get(instance);
        } catch (IllegalAccessException iae) {
            // @@?
        }
    }

    return values;
}

关于Java动态创建实例变量的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17267279/

相关文章:

java - 远程调试linux机器intellij

ios - Swift 设置数组自定义排序

python - 在 Python 中将任何可迭代对象转换为数组

c++ - 初始化并传递数组

java - 每次我在 Java 中运行我的程序时如何将对象添加到文件

java - android如何生成R

java - Android 代码发布到服务器时出错

java - 使用 Jackson 将 Java 对象转换为 JSON

Javascript 拼接对象而不是数组

javascript - 如果所有迭代都返回空,则执行某些操作,如果其中 1 次迭代返回某些内容,则执行其他操作