使用java反射技術完成物件所有屬性值的輸出

GeekWay發表於2013-08-28

使用java反射技術完成物件所有屬性的輸出


      在實際開發中,有時需要將某個物件的所有屬性值全部輸出以方便測試,但是有時物件的屬性過多,每個屬性挨個輸出必然會很麻煩,且會發生輸出不全的現象。為此,我們可以使用發射技術完成物件所有屬性值的輸出。

     這裡主要針對JavaBean型別的POJO物件的輸出,即所有屬性都包含getter和setter方法。

主要步驟是:
(1)獲取物件所屬類的Class方法。
	Class c =  Class.forName("包.類名稱");
(2)獲得該類的所有Filed。
Field[] fields = c.getDeclaredFields();
(3)將所有屬性的訪問許可權設為true。
因為JavaBean中所有的屬性訪問許可權都是private,所以無法直接獲得所有屬性,因此我們必須獲得其訪問許可權,通過下面的方法完成:

setAccessible(true);
(4)輸出物件屬性
f.getField(物件名稱);


下面請看一個完整例項:
package wml.demo;
import java.lang.reflect.*;
class Person{//預定義的一個演示類
	private String name;
	private int age;
	private String sex;
	//還可以有很多屬性,可以看出,如果單個輸出每個屬性,勢必是非常麻煩的!
	//對應的getter和setter方法
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
}


public class OutAllFieldsDemo  {
	public static void main(String args[])throws Exception{
		//預先生成一個p1物件
		Person p1 = new Person();
		p1.setName("Jefferson");
		p1.setAge(23);
		p1.setSex("male");
		//再生成一個p2物件
		Person p2 = new Person();
		p2.setName("wangminli");
		p2.setAge(24);
		p2.setSex("famale");
		
		//使用反射技術完成物件屬性的輸出
		Class<?> c = null;
		c = Class.forName("wml.demo.Person");
		Field [] fields = c.getDeclaredFields();
		
		for(Field f:fields){
			f.setAccessible(true);
		}
		//輸出p1的所有屬性
		System.out.println("=============About p1===============");
		for(Field f:fields){
			String field = f.toString().substring(f.toString().lastIndexOf(".")+1);			//取出屬性名稱
			System.out.println("p1."+field+" --> "+f.get(p1));
		}	
		//同上輸出p2所有屬性
		System.out.println("=============About p2===============");
		for(Field f:fields){
			String field = f.toString().substring(f.toString().lastIndexOf(".")+1);			//取出屬性名稱
			System.out.println("p2."+field +" --> "+f.get(p2));
		}	
		
	}
}
執行結果:
=============About p1===============
p1.name --> Jefferson
p1.age --> 23
p1.sex --> male
=============About p2===============
p2.name --> wangminli
p2.age --> 24
p2.sex --> famale



以上程式碼可以作為模板工具,在出現類似情況是可以修改使用,非常方便!




(你的回覆是我最大的動力!)







相關文章