
从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)); } }