ToStringBuilderRecursive 递归对象打印

做java软件开发的人肯定会经常要调试代码,把整个对象的每一个属性都打印出来,但调用所有的对应属性的get方法又实在太过于繁琐,于是希望有没有什么工具能直接用一个方法就实现这个功能,于是就出现了ToStringBuilder这个工具类,这个工具类可以优雅方便的打印出某个对象的所有属性性。

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

 

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";
}

你可能感兴趣的:(java,ToStringBuilder)