Java核心技术很优美的代码2 "万能的"toString
2011-09-11 21:21
633 查看
/** @version 1.11 2004-02-21 @author Cay Horstmann */ import java.lang.reflect.*; import java.util.*; import java.text.*; public class ObjectAnalyzerTest { public static void main(String[] args) { ArrayList<Integer> squares = new ArrayList<Integer>(); for (int i = 1; i <= 5; i++) squares.add(i * i); System.out.println(new ObjectAnalyzer().toString(squares)); } } class ObjectAnalyzer { /** Converts an object to a string representation that lists all fields. @param obj an object @return a string with the object's class name and all field names and values */ public String toString(Object obj) { if (obj == null) return "null"; if (visited.contains(obj)) return "..."; visited.add(obj); Class cl = obj.getClass(); if (cl == String.class) return (String) obj; if (cl.isArray()) { String r = cl.getComponentType() + "[]{"; for (int i = 0; i < Array.getLength(obj); i++) { if (i > 0) r += ","; Object val = Array.get(obj, i); if (cl.getComponentType().isPrimitive()) r += val; else r += toString(val); } return r + "}"; } String r = cl.getName(); // inspect the fields of this class and all superclasses do { r += "["; Field[] fields = cl.getDeclaredFields(); AccessibleObject.setAccessible(fields, true); // get the names and values of all fields for (Field f : fields) { if (!Modifier.isStatic(f.getModifiers())) { if (!r.endsWith("[")) r += ","; r += f.getName() + "="; try { Class t = f.getType(); Object val = f.get(obj); if (t.isPrimitive()) r += val; else r += toString(val); } catch (Exception e) { e.printStackTrace(); } } } r += "]"; cl = cl.getSuperclass(); } while (cl != null); return r; } private ArrayList<Object> visited = new ArrayList<Object>(); }
相关文章推荐
- Java核心技术很优美的代码1
- Java核心技术很优美的代码3 实现数组的动态分配
- "爱说说"技术原理:前后台参数约定及逻辑代码(三)
- 一种公认提供toString的方法_JAVA核心技术卷轴Ⅰ
- Java 核心技术5NOTE String char 代码单元 代码点 操作
- “Java核心技术代码点和代码单元”部分学习
- "爱说说"技术原理:前后台参数约定及逻辑代码(三)
- Java 核心技术, 通用的toString(Object obj)
- java核心技术 第三章代码栗子
- java 核心技术 日历代码
- java问题 java核心技术(Core Java)代码错误
- 关于Java核心技术书中的代码点和代码单元是怎么理解的呢?
- 关于Java核心技术书中的代码点和代码单元是怎么理解的呢?
- 二刷java核心技术_重温基础部分的练习代码保存
- 一种公认提供toString的方法_JAVA核心技术卷轴Ⅰ
- Java核心技术,让计算机"一芯多用"的多线程技术
- java分页技术核心代码实现
- Java核心技术中的一个类GBC的代码(可能用到)
- 在android的java代码中对控件的"layout_marginLeft"进行设置
- Java核心代码(三)javap跟踪String类"+"加号验证