Вы можете решить это с помощью отражения
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", могут корректироваться в соответствии с вашими потребностями.