使用java反射技術完成物件所有屬性值的輸出
使用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
以上程式碼可以作為模板工具,在出現類似情況是可以修改使用,非常方便!
(你的回覆是我最大的動力!)
相關文章
- C#通過反射獲取物件屬性,列印所有欄位屬性的值C#反射物件
- 獲取物件屬性型別、屬性名稱、屬性值的研究:反射和JEXL解析引擎物件型別反射
- Java反射-屬性Java反射
- 比較兩個物件是否相同,輸出不同的屬性值(一)物件
- Java 反射修改類的常量值、靜態變數值、屬性值Java反射變數
- C#反射設定屬性值和獲取屬性值C#反射
- Python __dict__屬性:檢視物件內部所有屬性名和屬性值組成的字典Python物件
- 通過java反射,遞迴查詢物件所有屬性,為空也要返回欄位的結構Java反射遞迴物件
- Python技術分享:ndarray物件的常用屬性Python物件
- java反射技術Java反射
- JavaScript使用name屬性值獲取元素物件JavaScript物件
- 反射-通過反射寫一個通用的設定某個物件的某個屬性為指定的值反射物件
- 將一個物件裡所有的空值屬性設定成null物件Null
- final屬性值能被反射修改嗎?反射
- javascript獲取物件直接量中的屬性和屬性值JavaScript物件
- 元物件、 屬性 和 反射程式設計物件反射程式設計
- java反射技術的應用Java反射
- 物件屬性值賦給變數物件變數
- 揭秘Java反射:如何輕鬆獲取類的屬性及父類屬性Java反射
- js使用id屬性值就可以引用一個物件JS物件
- 使用 tpl 標籤和 for 讀取物件屬性值中的陣列物件陣列
- JAVA裡List集合中的物件根據物件的某個屬性值降序或者升序排序Java物件排序
- javascript 將變數值作為物件屬性 獲取物件對應的值JavaScript變數物件
- C#獲取某個物件的屬性值C#物件
- 合併陣列物件中相同的屬性值陣列物件
- Java中的反射技術--小白新手向Java反射
- java值物件的傳輸問題請教Java物件
- (轉)螢幕輸入輸出的一些屬性
- 使用屬性Props完成一張卡片
- js如何判斷物件的屬性值是物件還是陣列JS物件陣列
- Java常見的系統屬性值及如何通過Java程式設計獲得系統屬性值Java程式設計
- GObject的物件屬性GoObject物件
- Object物件的屬性Object物件
- C# 可以利用反射給只讀屬性賦值嗎?C#反射賦值
- javascript原型物件的屬性不能夠覆蓋物件自有屬性JavaScript原型物件
- Java 輸出某路徑下的所有檔案Java
- <a>為空使用href屬性值填充
- java反射構建物件和方法的反射呼叫Java反射物件