java反射覆盖toString()方法

来源:互联网 发布:电脑逆战刷箱子软件 编辑:程序博客网 时间:2024/05/16 11:32
/**
*如何用反射来覆盖数据对象的toString()方法
*对于用来存储数据的对象,往往需要遍历它们所有属性及其值,这些变量可能会发生些变
*化,例如改变名称,新增属性等,如果在toString()方法中,使用反射可以便于后期维护
*/
import java.lang.reflect.Field;


class DataObject
{
private String name;//姓名
private String desc;//描述
private int age;//年龄
private String other;//其他
//构造方法
public DataObject(String name,String desc,int age,String other){
super();
this.name=name;
this.desc=desc;
this.age=age;
this.other=other;
}
//覆盖toString()方法
public String toString(){
StringBuffer sb=new StringBuffer();//定义一个StringBuffer
//得到所有的成员变量Fields
Field[] fields=this.getClass().getDeclaredFields();
//遍历一下
for(Field f:fields){
sb.append(f.getName());//得到变量名字
sb.append("=");//添加“=”号
try{
sb.append(f.get(this));
}catch(IllegalArgumentException e){
e.printStackTrace();
}catch(IllegalAccessException e){
e.printStackTrace();
}
sb.append("\n");
}
return sb.toString();
}
}


public class DataObjectTest
{
public static void main(String[] args){
//创建一个DataObject对象
Object obj=new DataObject("zhangsan","desc test",10,"other test");
//打印它的toString()方法的返回值
System.out.print(obj);
}

}


name=zhangsan
desc=desc test
age=10
other=other test

以上代码,访问Field的时候,并没有使用setAccessible(true)方法,因为toString()方法在类中。

0 0
原创粉丝点击