一、概述
Field是一個類,位于java.lang.reflect包下,在Java反射中Field類描述的是類的屬性資訊,功能包括:
- 獲取當前物件的成員變數的型別
- 對成員變數重新設值
二、如何獲取Field類物件
- getField(String name): 獲取類特定的方法,name引數指定了屬性的名稱
- Class.getFields(): 獲取類中public型別的屬性,回傳一個包含某些 Field 物件的陣列,該陣列包含此 Class 物件所表示的類或介面的所有可訪問公共欄位
- getDeclaredField(String name): 獲取類特定的方法,name引數指定了屬性的名稱
- getDeclaredFields(): 獲取類中所有的屬性(public、protected、default、private),但不包括繼承的屬性,回傳 Field 物件的一個陣列
三、Field 類物件常用方法
?1.獲取變數的型別:
- Field.getType():回傳這個變數的型別
- Field.getGenericType():如果當前屬性有簽名屬性型別就回傳,否則就回傳 Field.getType()
- isEnumConstant() : 判斷這個屬性是否是列舉類
?2.獲取成員變數的修飾符:
- Field.getModifiers() 以整數形式回傳由此 Field 物件表示的欄位的 Java 語言修飾符
?3.獲取和修改成員變數的值:
- getName() : 獲取屬性的名字
- get(Object obj) 回傳指定物件obj上此 Field 表示的欄位的值
- set(Object obj, Object value) 將指定物件變數上此 Field 物件表示的欄位設定為指定的新值
四、實踐代碼
?1.獲取物件中的所有欄位名
//獲取所有欄位名
Field[] declaredFields = FinancieWaybillPageListVo.class.getDeclaredFields();
List<String> columnList = new ArrayList<>();
for (Field declaredField : declaredFields) {
String name = declaredFields.getClass().getName();
if ("CustomColumnVo".equals(name)) {
continue;
}
columnList.add(name);
}
userCustomColumn.setColumnName(columnList);
?2.獲取物件中的所有屬性的值
// 查詢對應的銷貨清單資料
List<SalesListVo> lists = getSalesList(dto);
List<Object> salesList = new ArrayList<>();
for (SalesListVo sales : lists) {
// 獲取所有的屬性陣列
Field[] fields = sales.getClass().getDeclaredFields();
for (Field field : fields) {
//設定允許通過反射訪問私有變數
field.setAccessible(true);
//獲取欄位的值
try {
salesList.add(field.get(sales));
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/514050.html
標籤:Java
上一篇:Object Lessons
