Skip to content

Instantly share code, notes, and snippets.

@krissrex
Created September 29, 2016 22:23
Show Gist options
  • Save krissrex/cc95f280a5ed95e6a3e9ee30b62e39e9 to your computer and use it in GitHub Desktop.
Save krissrex/cc95f280a5ed95e6a3e9ee30b62e39e9 to your computer and use it in GitHub Desktop.
Java snippet to print all member variables of a class.
public class DebugUtil {
private DebugUtil() {}
/**
* Debug method to print all member variables
* @param obj
*/
public static void printMembers(Object obj) {
printMembers(obj, "");
}
/**
* Print members recursively using reflection.
* This uses Timber (https://github.com/JakeWharton/timber)
*/
private static void printMembers(Object obj, String indent) {
Timber.d("%s%s", indent, obj.getClass().getSimpleName());
Class currentClass = obj.getClass();
final ArrayList<Field> declaredFields = new ArrayList<>();
// Declared fields do not contain super class fields, so we must climb up the hierarchy
while (currentClass != Object.class) {
for (Field field : currentClass.getDeclaredFields()) {
declaredFields.add(field);
}
currentClass = currentClass.getSuperclass();
}
for (final Field field : declaredFields) {
boolean accessible = field.isAccessible();
field.setAccessible(true);
if (field.getType().isPrimitive() || field.getType() == String.class) {
try {
Timber.d("%s\t%s: %s", indent, field.getName(), field.get(obj));
} catch (IllegalAccessException e) {
Timber.e(e, "Failed to read field %s: %s", field.getName(), e.getMessage());
}
} else {
try {
printMembers(field.get(obj), indent + "\t");
} catch (IllegalAccessException e) {
Timber.e(e, "Failed to print members in field %s: %s", field.getName(), e.getMessage());
}
}
field.setAccessible(accessible);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment