我有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对象,它将返回这些值的对象数组。
我知道我们可以使用反射,但是不确定如何使用?请帮忙。
答案 0 :(得分:1)
您可以通过反射来解决
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;
}
确保进行必要的null检查和错误处理。
第二种方法将获取类中所有可公开访问的getter,并调用它们以获取值。
这还假定您所有以“ get”开头的吸气剂都可能必须根据您的需要进行调整。