Java 核心技术, 通用的toString(Object obj)

这是今天看Java核心技术:基础知识 中反射方面的内容中看到的一个比较使用的工具方法。

通过调用该方法我们可以查看对象内部所有域的值。

public class ObjectAnalyzer {

private static ObjectAnalyzer objAnalyzer;
private ArrayList<Object> visited = new ArrayList<Object>();
public static ObjectAnalyzer getObjAnalyzer() {
if(objAnalyzer == null) {
objAnalyzer = new ObjectAnalyzer();
}
return objAnalyzer;
}
public String toString(Object obj) {
if(obj == null) return "null";
if(visited.contains(obj)) return "....";
visited.add(obj);
Class cl = obj.getClass();
if(cl == String.class) return (String) obj;
if(cl.isArray()) {
String r = cl.getComponentType()+"[]{";
for(int i=0; i<Array.getLength(obj); i++) {
if(i > 0) r+=",";
Object val = Array.get(obj, i);
if(cl.getComponentType().isPrimitive()) r+= val;
else r+= toString(val);
}
return r + "}";
}

String r = cl.getName();
do {
r+="[";
Field[] fields = cl.getDeclaredFields();
/**
* Shield Java Access Control
*/
AccessibleObject.setAccessible(fields, true);
for(Field f : fields) {
/**
* Judge the field's modifier, whether it is a static
*/
if(!Modifier.isStatic(f.getModifiers())) {
if(!r.endsWith("[")) r+=",";
r+=f.getName()+"=";
try {
Class t = f.getType();
Object val = f.get(obj);
/**
* Judge if field is a primitive type
*/
if(t.isPrimitive()) r += val;
else r += toString(val);
} catch(Exception e) {
e.printStackTrace();
}
}
}
r+="]";
cl = cl.getSuperclass();
} while(cl != null);
return r;
}
}

转载于:https://www.cnblogs.com/tcpcg/archive/2012/01/01/2309393.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值