1、应用java反射机制打印一个对象应用java反射机制打印一个对象 有时候我们需要在程序运行的时候监视一个对象的各个属性的具体的值,比如我就遇到这样的情况,老板要我把一个xml文件中的数据注入到内存中的一个java对象中,程序写完后,调试时就想如果能把注入后的对象的所有属性的值打印出来,那么就能很容易的找出程序中存在的问题,这样就很方便了,所以我就简单的写了一个打印对象的方法。先看一下列子吧Xml文件内容: 对应的java类:(是用反射机制自动生成的,等有时间我把生成java类的的代码和注入的代码都贴出来,本来用 java动态编译+反射机制 可以实现将xml文件直接生成一个java对象的,但是我
2、考虑到在写代码的时候没有智能提示很容易出错,所以选择自动生成类,再创建对象,再注入值)class Predict_data public String city_code = null; public String city_name = null; public String date_time = null; public String nodeText = null; public Detail detail = null; public class Detail public String date = null; public String pt = null; public Str
3、ing nodeText = null; public Day day = null; public class Day public String nodeText = null; public Weather weather = null; public class Weather public String img = null; public String info = null; public String temperature = null; public String nodeText = null; public Wind wind = null; public class
4、Wind public String direct = null; public String power = null; public String nodeText = null; public Night night = null; public class Night public String nodeText = null; public Weather weather = null; public class Weather public String img = null; public String info = null; public String temperature
5、 = null; public String nodeText = null; public Wind wind = null; public class Wind public String direct = null; public String power = null; public String nodeText = null; 打印结果 city_code:101010100 city_name:北京 date_time:2012-11-01 08:00 nodeText:null detail detail date:2012-11-01 pt:2012-11-01 08:00
6、nodeText:null day nodeText:null weather img:0 info:晴 temperature:15.0 nodeText:null wind direct:无持续风向 power:微风 nodeText:null night nodeText:null weather img:0 info:晴 temperature:4.0 nodeText:null wind direct:无持续风向 power:微风 nodeText:null detail date:2012-11-02 pt:2012-11-01 08:00 nodeText:null day no
7、deText:null weather img:1 info:多云 temperature:13.0 nodeText:null wind direct:无持续风向 power:微风 nodeText:null night nodeText:null weather img:7 info:小雨 temperature:6.0 nodeText:null wind direct:无持续风向 power:微风 nodeText:null detail date:2012-11-03 pt:2012-11-01 08:00 nodeText:null day nodeText:null weathe
8、r img:8 info:中雨 temperature:7.0 nodeText:null wind direct:无持续风向 power:微风 nodeText:null night nodeText:null weather img:6 info:雨夹雪 temperature:0.0 nodeText:null wind direct:北风 power:45级 nodeText:null detail date:2012-11-04 pt:2012-11-01 08:00 nodeText:null day nodeText:null weather img:2 info:阴 tempe
9、rature:5.0 nodeText:null wind direct:北风 power:45级 nodeText:null night nodeText:null weather img:0 info:晴 temperature:-3.0 nodeText:null wind direct:北风 power:34级 nodeText:null detail date:2012-11-05 pt:2012-11-01 08:00 nodeText:null day nodeText:null weather img:0 info:晴 temperature:7.0 nodeText:null
10、 wind direct:北风 power:34级 nodeText:null night nodeText:null weather img:0 info:晴 temperature:-4.0 nodeText:null wind direct:无持续风向 power:微风 nodeText:null detail date:2012-11-06 pt:2012-11-01 08:00 nodeText:null day nodeText:null weather img:0 info:晴 temperature:10.0 nodeText:null wind direct:无持续风向 po
11、wer:微风 nodeText:null night nodeText:null weather img:0 info:晴 temperature:-4.0 nodeText:null wind direct:无持续风向 power:微风 nodeText:null detail date:2012-11-07 pt:2012-11-01 08:00 nodeText:null day nodeText:null weather img:0 info:晴 temperature:11.0 nodeText:null wind direct:无持续风向 power:微风 nodeText:nul
12、l night nodeText:null weather img:0 info:晴 temperature:0.0 nodeText:null wind direct:无持续风向 power:微风 nodeText:null 下面我把代码分享给大家:(就两个方法,很简单吧!)public static String objectToString(Object o) StringBuffer s=new StringBuffer(); s.append(n); printObject(o,s, ); s.append(n); return s.toString();private static
13、 void printObject(Object o,StringBuffer s,String blank) Class clazz=o.getClass(); Field fields=clazz.getDeclaredFields(); for(int i=0;ifields.length;i+) try String value=fieldsi.get(o).toString(); /判断是不是对象 if(value.indexOf()!=-1) if(value.startsWith(L)/如果是数组 s.append(blank+fieldsi.getName()+n); for(
14、int j=0;jArray.getLength(fieldsi.get(o);j+) s.append(blank+ +fieldsi.getName()+n); printObject(Array.get(fieldsi.get(o),j),s,blank+ ); s.append(blank+ +n); s.append(blank+n); else s.append(blank+fieldsi.getName()+n); printObject(fieldsi.get(o),s,blank+ ); s.append(blank+n); else s.append(blank+fieldsi.getName()+:); s.append(value+n); catch (Exception e) if(!fieldsi.getName().startsWith(this) s.append(blank+fieldsi.getName()+:); s.append(nulln);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1