Java tutorial
//package com.java2s; import java.lang.reflect.*; import java.util.*; public class Main { public static Map<String, Object> getClassFields(Object obj) { Map<String, Object> values = new LinkedHashMap<String, Object>(); for (Field field : getAllFieldsValues(obj.getClass())) { values.put(field.getName(), getField(field, obj)); } return values; } /** * Return a list of all fields (whatever access status, and on whatever * superclass they were defined) that can be found on this class. * This is like a union of {@link Class#getDeclaredFields()} which * ignores and super-classes, and {@link Class#getFields()} which ignored * non-public fields * * @param clazz The class to introspect * @return The complete list of fields */ public static Field[] getAllFieldsValues(Class<?> clazz) { List<Class<?>> classes = getAllSuperclasses(clazz); classes.add(clazz); return getAllFields(classes); } public static Object getField(Field field, Object source) { boolean accessible = field.isAccessible(); field.setAccessible(true); Object result = null; try { result = field.get(source); } catch (IllegalAccessException e) { // ignore } field.setAccessible(accessible); return result; } /** * Return a List of super-classes for the given class. * * @param clazz the class to look up * @return the List of super-classes in order going up from this one */ public static List<Class<?>> getAllSuperclasses(Class<?> clazz) { List<Class<?>> classes = new ArrayList<Class<?>>(); Class<?> superclass = clazz.getSuperclass(); while (superclass != null) { classes.add(superclass); superclass = superclass.getSuperclass(); } return classes; } /** * Return a list of all fields (whatever access status, and on whatever * superclass they were defined) that can be found on this class. * This is like a union of {@link Class#getDeclaredFields()} which * ignores and super-classes, and {@link Class#getFields()} which ignored * non-public fields * * @param clazz The class to introspect * @return The complete list of fields */ public static Field[] getAllFields(Class<?> clazz) { List<Class<?>> classes = getAllSuperclasses(clazz); classes.add(clazz); return getAllFields(classes); } /** * As {@link #getAllFields(Class)} but acts on a list of {@link Class}s and * uses only {@link Class#getDeclaredFields()}. * * @param classes The list of classes to reflect on * @return The complete list of fields */ private static Field[] getAllFields(List<Class<?>> classes) { Set<Field> fields = new HashSet<Field>(); for (Class<?> clazz : classes) { fields.addAll(Arrays.asList(clazz.getDeclaredFields())); } return fields.toArray(new Field[fields.size()]); } }