我有几个 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/