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";
}
相關文章
相關標籤/搜索