利用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;
}
}
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;
}
}
相关文章推荐
- 利用Java Reflect机制编写万能toString()方法
- (JDBC)利用Java反射编写一个万能的数据库表查询方法
- 【转载】JAVA利用反射机制访问private成员和方法
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- Java笔记——利用反射机制获取成员变量及成员方法
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- android中利用java反射原理将对象添加到sqlit数据库的万能方法
- Java记录 -88- 利用反射机制调用对象的私有方法和属性
- Java -- JDBC_利用反射及 JDBC 元数据编写通用的查询方法
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- JAVA中利用反射机制进行对象和Map相互转换的方法
- 利用java反射机制编写通用的toString 方法
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- java中利用反射机制得到一个类的所有构造方法,成员方法机器参数的列表
- 利用反射机制编写一个程序,这个程序能指定调用类的某个方法及构造方法,并把操作信息输出到控制台。
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- java中利用反射机制实现调用给定为字符串的方法名
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值