从JAVA核心技术卷轴Ⅰ:基础知识中整理得到。
import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
/**
* 一种公认提供toString的方法
*/
public class TestToString {
private List<Object> visited = new ArrayList<Object>();
public String toString(Object obj) {
if (obj == null)
return "null";
if (visited.contains(obj))
return "...";
visited.add(obj);
Class<?> c = obj.getClass();
if (c == String.class)
return (String) obj;
if (c.isArray()) {
String r = c.getComponentType() + "[]{";
for (int i = 0; i < Array.getLength(obj); i++) {
if (i > 0)
r += ",";
Object value = Array.get(obj, i);
if (c.getComponentType().isPrimitive())
r += value;
else
r += toString(value);
}
return r + "}";
}
String r = c.getName();
do {
r += "[";
Field[] fileds = c.getDeclaredFields();
AccessibleObject.setAccessible(fileds, true);
for (Field field : fileds) {
if (!Modifier.isStatic(field.getModifiers())) {
if (!r.endsWith("["))
r += ",";
r += field.getName() + "=";
try {
Class<?> t = field.getType();
Object val = field.get(obj);
if (t.isPrimitive())
r += val;
else
r += toString(val);
} catch (Exception e) {
e.printStackTrace();
}
}
}
r += "]";
c = c.getSuperclass();
} while (c != null);
return r;
}
public static void main(String[] args) {
List<Integer> values = new ArrayList<Integer>();
for (int i = 0; i < 6; i++) {
values.add(i * i);
}
System.err.println(new TestToString().toString(values));
}
}