您的位置:首页 > 编程语言 > Java开发

利用Java Reflect机制编写万能toString()方法

2013-02-19 21:00 232 查看
package
com.accp.test.filed;

import
java.lang.reflect.AccessibleObject;
import
java.lang.reflect.Array;
import
java.lang.reflect.Field;
import
java.lang.reflect.Modifier;
import
java.util.ArrayList;
import
java.util.List;

public

class ObjectAnalyzer {

private
List<Object> visited
= new
ArrayList<Object>();

public
String toString(Object obj) {

if
(obj == null)
return

null;
//
如果obj为空..返回null
if
(visited.contains(obj))
return

"...";
//
如果visited中已经包含obj,返回...

visited.add(obj);

Class
c1 = obj.getClass(); //
得到运行时对象

if
(c1 == String.class)
return
(String) obj; //
如果c1是String类型,直接转换

if
(c1.isArray()) { //
如果是数组类型
String r = c1.getComponentType() +
"[]{";
//
得到该数组组件类型的Class

for
(int
i = 0; i < Array.getLength(obj); i++) {
if
(i > 0)
r +=
",";
Object var = Array.get(obj,
i); //
取得obj[i]元素的值
if
(c1.getComponentType().isPrimitive()) //
如果为基本类型
r += var;
else
r += toString(var);
//
递归调用
}
return
r + "}";
}

String r = c1.getName();
//
得到obj名称

//
检查本类域和所有超类域
do
{
r +=
"[";
Field[] fields = c1.getDeclaredFields();
//
得到本类和超类所有域
AccessibleObject.setAccessible(fields,
true);
//
将所有域设置为可访问的.

for
(Field field : fields) {
if
(!Modifier.isStatic(field.getModifiers())) {
if
(!r.endsWith("["))
r +=
",";
r += field.getName() +
"=";

try
{
Class
type = field.getType(); //
得到字段类型
Object var = field.get(obj);
//设置值
if
(type.isPrimitive()) //判断是否为基本类型
r += var;
else
r += toString(var);
}
catch
(Exception e) {
e.printStackTrace();
}
}
}
r+="]";
c1 = c1.getSuperclass();
}
while
(c1 != null);

return
r;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐