JAVA反射自动创建ToString 方法 或带有格式的tostring

public class ObjectUtils {

	private static final String LINE = System.getProperty("line.separator"); 
	
	static class Car{
		private String id;
		private String name;
		private Date creatTime;
		public String getId() {
			return id;
		}
		public void setId(String id) {
			this.id = id;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public Date getCreatTime() {
			return creatTime;
		}
		public void setCreatTime(Date creatTime) {
			this.creatTime = creatTime;
		}
		
	}
	public static void main(String[] args) {
		Car po = new Car();
		po.setId("1");
		po.setName("a");
		po.setCreatTime(new Date());
		System.out.println(ObjectUtils.getToStringFormat(po));
		System.out.println(ObjectUtils.getToString(po));
		
	}
	public static String getToStringFormat(Object o) {
		Class<? extends Object> clazz = o.getClass();
		StringBuilder builder = 
				new StringBuilder()
					.append(clazz.toString().substring(clazz.toString().lastIndexOf('.') + 1))
					.append(LINE)
					.append("   [");
		Field[] fields = clazz.getDeclaredFields();
		for (int i = fields.length - 1; i >= 0; i--) {
			Field field = fields[i];
			field.setAccessible(true);
			if (i == 0) {
				Object fieldValue = getFieldValue(o, field);
				builder.append(LINE)
					.append("    ")
					.append(field.getName())
					.append(" = ");
				if (fieldValue == null) {
					builder.append("null");
				} else {
					builder.append(fieldValue.toString());
				}
				builder.append(LINE)
					.append("   ]");
			} else {
				builder.append(LINE)
					.append("    ")
					.append(field.getName())
					.append(" = ");
				Object fieldValue = getFieldValue(o, field);
				if (fieldValue == null) {
					builder.append("null");
				} else {
					builder.append(fieldValue.toString());
				}
				builder.append(",");
			}
		}
		return builder.toString();
	}
	public static String getToString(Object o) {
		Class<? extends Object> clazz = o.getClass();
		StringBuilder builder = 
				new StringBuilder()
					.append(clazz.toString().substring(clazz.toString().lastIndexOf('.') + 1))
					.append(" [");
		Field[] fields = clazz.getDeclaredFields();
		for (int i = fields.length - 1; i >= 0; i--) {
			Field field = fields[i];
			field.setAccessible(true);
			if (i == 0) {
				Object fieldValue = getFieldValue(o, field);
				builder.append(field.getName())
					.append(" = ");
				if (fieldValue == null) {
					builder.append("null");
				} else {
					builder.append(fieldValue.toString());
				}
				builder.append("]");
			} else {
				builder.append(field.getName())
					.append(" = ");
				Object fieldValue = getFieldValue(o, field);
				if (fieldValue == null) {
					builder.append("null");
				} else {
					builder.append(fieldValue.toString());
				}
				builder.append(",");
			}
		}
		return builder.toString();
	}
	
	private static Object getFieldValue(Object o,Field field) {
		try {
			return field.get(o);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

 

 

执行结果:

ObjectUtils$Car

   [

    creatTime = Wed Oct 31 22:29:49 CST 2018,

    name = a,

    id = 1

   ]

ObjectUtils$Car [creatTime = Wed Oct 31 22:29:49 CST 2018,name = a,id = 1]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值