Skip to content

Instantly share code, notes, and snippets.

@subchen
Created February 18, 2014 09:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save subchen/9067282 to your computer and use it in GitHub Desktop.
Save subchen/9067282 to your computer and use it in GitHub Desktop.
ToStringBuilder.java
import java.lang.reflect.*;
public class ToStringBuilder {
private final StringBuilder sb = new StringBuilder(32);
private final Object object;
private final boolean formatted;
public static String reflection(Object object) {
return reflection(object, true);
}
public static String reflection(Object object, boolean formatted) {
ToStringBuilder builder = new ToStringBuilder(object, formatted);
Field[] fields = object.getClass().getDeclaredFields();
AccessibleObject.setAccessible(fields, true);
for (Field field : fields) {
String fieldName = field.getName();
if (field.getName().indexOf('$') != -1) {
continue;
}
if (Modifier.isTransient(field.getModifiers()) || (Modifier.isStatic(field.getModifiers()))) {
continue;
}
try {
Object fieldValue = field.get(object);
builder.append(fieldName, fieldValue);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
return builder.toString();
}
public ToStringBuilder(Object object) {
this(object, true);
}
public ToStringBuilder(Object object, boolean formatted) {
this.object = object;
this.formatted = formatted;
}
public void append(String fieldName, Object value) {
if (value == null) {
value = "<null>";
} else if (value.getClass().isArray()) {
int length = Array.getLength(value);
StringBuilder str = new StringBuilder(32);
str.append('[');
for (int i = 0; i < length; i++) {
if (i >= 10) {
str.append(",...");
break;
}
if (i > 0) {
str.append(',');
}
str.append(Array.get(value, i));
}
str.append(']');
value = str.toString();
}
if (formatted) {
sb.append(" ").append(fieldName).append(" = ").append(value).append('\n');
} else {
if (sb.length() > 0) {
sb.append(';');
}
sb.append(fieldName).append('=').append(value);
}
}
public String build() {
return toString();
}
@Override
public String toString() {
if (formatted) {
return object.getClass().getName() + "[\n" + sb + ']';
} else {
return object.getClass().getSimpleName() + '[' + sb + ']';
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment