Это довольно старый вопрос, но я дам здесь ответ для новых поисков.
Используя подход, предложенный здесь @highlycaffeinated: https://stackoverflow.com/a/6796254/776860
Вы можетелегко найти желаемое решение с парой изменений.
Получение списка только имен частных полей
public List<String> getMap(Object o) throws IllegalArgumentException, IllegalAccessException {
List<String> result = new ArrayList<String>();
Field[] declaredFields = o.getClass().getDeclaredFields();
for (Field field : declaredFields) {
if(!field.isAccessible()) {
result.add(field.getName());
}
}
return result;
}
Получение карты всех имен полей и их значений
public Map<String, Object> getMap(Object o) throws IllegalArgumentException, IllegalAccessException {
Map<String, Object> result = new HashMap<String, Object>();
Field[] declaredFields = o.getClass().getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
result.put(field.getName(), field.get(o));
}
}
return result;
}
Точно так же, как @highlycaffeinated, предоставляемый только с дополнительной строкой field.setAccessible(true);
, которая позволяет также анализировать private
полей.