重写ToString()

在java中,重要的就是对象吧,通常我们需要测试时,都需要对象.get()获得对象的属相值,这样操作的效率很低下啊。。。

现在奉上一个工具类,就可以解决这种问题。这里主要还是重写toString().

import java.lang.reflect.AccessibleObject;
import java.lang.reflect.Field;

public class EntityUtil {

	/**
	 * 返回代表当前对象的字符串对象,忽略ignores所指定的的属性
	 * @return包含所有的成员变量的名称和他们的值,以及从父类中继承的属性。不包含Objecy中的属性。
	 */
	public static String toString(Object entity,String[] ignores){
		if(entity == null){
			return null;
		}
		StringBuffer buffer = new StringBuffer();
		Class c = entity.getClass();
		buffer.append(c.getName());
		buffer.append("[");
		
		Class parent = c.getSuperclass();
		
		while(parent != null && !(parent == Object.class)){
			Field[] fields = parent.getDeclaredFields();
			try{
				appendFields(buffer,fields,entity,ignores);
			}catch(Exception e){
				e.printStackTrace();
			}
			parent = parent.getSuperclass();
		}
		try{
			Field[] fields = c.getDeclaredFields();
			appendFields(buffer,fields,entity,ignores);
		}catch(Exception e){
			e.printStackTrace();
		}
		buffer.append("]");
		return buffer.toString();
	}
	/**
	 * 返回代表对象的字符串对象
	 * @param entity
	 * @return 包含所有的成员变量的名称和他们的值,以及从父类中继承的属性。不包含Objecy中的属性。
	 */
	public static String toString(Object entity){
		return toString(entity,new String[0]);
	}
	
	private static void appendFields(StringBuffer buffer,Field[] fields,Object entity,
			String[] ignores) throws Exception{
		AccessibleObject.setAccessible(fields, true);
		for (int i = 0; i < fields.length; i++) {
			String name = fields[i].getName();
			if(!shouldIgnore(name,ignores)){
				if(i!=0){
					buffer.append(",");
				}
				if(!name.equals("class")){
					Object value = fields[i].get(entity);
					buffer.append(name+"="+value);
				}
			}
		}
	}

        private static boolean shouldIgnore(String field, String[] ignores) {
		boolean ignore = false;
		for (int i = 0; i < ignores.length; i++) {
			if(field.equalsIgnoreCase(ignores[i])){
				ignore = true;
				break;
			}
		}
		return false;
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值