ToStringBuilderRecursive 递归对象打印

作java软件开发的人确定会常常要调试代码,把整个对象的每个属性都打印出来,但调用全部的对应属性的get方法又实在太过于繁琐,因而但愿有没有什么工具能直接用一个方法就实现这个功能,因而就出现了ToStringBuilder这个工具类,这个工具类能够优雅方便的打印出某个对象的全部属性性。html

对于简单的类,ToStringBuilder很是好用,然而若是被打印的对象很是复杂,好比多个list嵌套,则ToStringBuilder就不起做了,对象内容嵌入的复杂对象没法被打印出来。因而为了解决这个问题,哥花了个把小时,写了个可以递归打印内部复杂对象的ToStringbuilder。虽然基本要求是实现了,但貌似打印出来的的样式实在太过于丑陋,有时间再改吧。若是有什么相关需求,请留言,哥必定第一时间知足你。java

 

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

public class ToStringBuilderRecursive {
	
	
	
	private static final List LEAVES = Arrays.asList(
	        Boolean.class, Character.class, Byte.class, Short.class,
	        Integer.class, Long.class, Float.class, Double.class, Void.class,
	        String.class,Date.class);
	private static String delimitor = "\n";
	
	public static String toStringRecursive(Object o){
		
	    if (o == null)
	        return "null"+delimitor;
	    
	    if (LEAVES.contains(o.getClass()))
	        return o.toString()+delimitor;
	    
	    if(o.getClass().isArray()){
		    Object[]  oa = (Object[]) o;
	    	StringBuffer sb = new StringBuffer();
	    	sb.append("[");
	    	for(int i =0;i<oa.length;i++)
	    	sb.append(toStringRecursive(oa[i]));	
	    	sb.append("]"+delimitor);
	    	return sb.toString();
	    }
	    
	    new ArrayList().getClass().getDeclaredFields();
	    StringBuilder sb = new StringBuilder();
	    sb.append(o.getClass().getSimpleName()).append(": [");
	    for (Field f : o.getClass().getDeclaredFields()) {
	        if (Modifier.isStatic(f.getModifiers()))
	            continue;
	        f.setAccessible(true);
	        sb.append(f.getName()).append(": ");
	        try {
				sb.append(toStringRecursive(f.get(o))).append(" ");
			} catch (IllegalArgumentException e) {				
				e.printStackTrace();
			} catch (IllegalAccessException e) {				
				e.printStackTrace();
			}
	    }
	    sb.append("]"+delimitor);
	    return sb.toString();
	}
	
	public static void main(String[] agr){
		A a = new A();
		
		String str = ToStringBuilderRecursive.toStringRecursive(a);
		System.out.println(str);
	}
	
	
	
}
class A{
	List list = Arrays.asList("a","b","c","d");
	Date date = new Date();
	Long len = 111l;
	String outerojb = "outerobj";
}
相关文章
相关标签/搜索