Created
September 29, 2016 22:23
-
-
Save krissrex/cc95f280a5ed95e6a3e9ee30b62e39e9 to your computer and use it in GitHub Desktop.
Java snippet to print all member variables of a class.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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