程序清单-通用的toString方法
2017-12-24 22:34
183 查看
一种公认的可供任意类使用的toString方法:
(循环引用将会导致无限递归,因此使用visited记录已经被访问过的对象)
输出信息:
(循环引用将会导致无限递归,因此使用visited记录已经被访问过的对象)
public class ObjectAnalyzer { private ArrayList<Object> visited = new ArrayList<Object>(); 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(); do { r+="["; Field[] fields = cl.getDeclaredFields(); AccessibleObject.setAccessible(fields,true); 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 (IllegalAccessException e) { e.printStackTrace(); } } } r+="]"; cl = cl.getSuperclass(); }while (cl!=null); return r; } }
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)); } }
输出信息:
java.util.ArrayList[elementData=class java.lang.Object[]{java.lang.Integer[value=1][][],java.lang.Integer[value=4][][],java.lang.Integer[value=9][][],java.lang.Integer[value=16][][],null,null,null,null,null,null},size=4][modCount=4][][]
相关文章推荐
- 几种通用防注入程序绕过方法之讲解
- 入门级CUDA程序调试的通用方法——可用于Matlab的MexCuda
- Android应用开发完全退出程序的通用方法!!!
- Android应用开发完全退出程序的通用方法
- Android应用开发完全退出程序的通用方法
- Android应用开发完全退出程序的通用方法!!!
- Effective Java - 对于所有对象都通用的方法 - 始终要覆盖 toString
- 窗体程序捕捉异常的通用简便方法不用到处添加try-catch
- 一个通用的类的toString()方法
- 编写高质量代码:改善Java程序的151个建议(第1章:JAVA开发中通用的方法和准则___建议16~20)
- 改善java程序之java通用方法和准则
- 反射应用之一---编写通用的toString()方法
- iOS:界面适配(一)--Universal通用程序 iPhone、iPad适配(方法)
- Object类中通用方法之:toString()方法
- Android应用开发完全退出程序的通用方法!!!
- Android应用开发完全退出程序的通用方法!!! (转)
- 通用的使用 VIM+Ctags+Cscope 访问程序文件的方法
- 9.10 为了让程序清单9.8中的 to_binary()函数更通用,编写一个to_base_n()函数接收两个参数。。。。。。。
- 对所用对象的通用方法 - toString(), clone()
- Android应用开发完全退出程序的通用方法!!!