Java反射如何獲取字段屬性值_第1頁
Java反射如何獲取字段屬性值_第2頁
Java反射如何獲取字段屬性值_第3頁
Java反射如何獲取字段屬性值_第4頁
Java反射如何獲取字段屬性值_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第Java反射如何獲取字段屬性值目錄Java反射獲取字段屬性值案例反射對象獲取屬性和值憑借成string描述直接上代碼

Java反射獲取字段屬性值

反射獲取Java類的所有字段,包括所有父類中的字段。類自身的字段可直接通過方法

getDeclaredFields()【獲取所有修飾符字段】或者getFields()【獲取public修飾的字段】獲取,但父類中的字段暫時沒有發(fā)現(xiàn)直接獲取的方式。

需要遞歸獲取所有的父類,然后獲取他們的字段,最終獲取到類的所有字段。

如果要獲取字段值,則需要設(shè)置字段可訪問即:field.setAccessible(true);field為reflect包下的Field類

案例

1.父類

packagecom.carl.study.springboot.bean;

importlombok.Data;

importlombok.experimental.Accessors;

*@authorchangez

*@desc

*@date2025/3/1011:30

@Data

@Accessors(chain=true)

publicclassBeanBasic{

privateIntegerid;

privateLongcreateTime;

privateLongupdateTime;

}

2.子類

packagecom.carl.study.springboot.bean;

importlombok.Data;

importlombok.EqualsAndHashCode;

importlombok.ToString;

importlombok.experimental.Accessors;

*@authorchangez

*@desc

*@date2025/3/1011:17

@Data

@EqualsAndHashCode(callSuper=true)

@ToString(callSuper=true)

@Accessors(chain=true)

publicclassStudentextendsBeanBasic{

privateStringname;

privateStringaddress;

}

3.測試類,獲取student類的所有字段

packagetest.lombok;

importcom.carl.study.springboot.bean.Student;

importorg.junit.Test;

importjava.lang.reflect.Field;

importjava.util.ArrayList;

importjava.util.Arrays;

importjava.util.List;

*@authorchangez

*@descJava反射獲取類的所有屬性.

*@date2025/3/1011:41

publicclassLombokTest{

@Test

publicvoidgetParentField(){

Studentstu1=newStudent();

stu1.setName("student-name")

.setAddress("student1-address")

.setId(1)

.setCreateTime(20250310140423L)

.setUpdateTime(20250310140423L)

;

Classclazz=Student.class;

ListFieldallFields=newArrayList(100);

//獲取當(dāng)前對象的所有屬性字段

//clazz.getFields():獲取public修飾的字段

//clazz.getDeclaredFields():獲取所有的字段包括private修飾的字段

allFields.addAll(Arrays.asList(clazz.getDeclaredFields()));

//獲取所有父類的字段,父類中的字段需要逐級獲取

ClassclazzSuper=clazz.getSuperclass();

//如果父類不是object,表明其繼承的有其他類。逐級獲取所有父類的字段

while(clazzSuper!=Object.class){

allFields.addAll(Arrays.asList(clazzSuper.getDeclaredFields()));

clazzSuper=clazzSuper.getSuperclass();

}

allFields.stream().forEach(field-{

//設(shè)置字段可訪問,否則無法訪問private修飾的變量值

field.setAccessible(true);

try{

//獲取字段名稱

StringfieldName=field.getName();

//獲取指定對象的當(dāng)前字段的值

ObjectfieldVal=field.get(stu1);

System.out.println(fieldName+"="+fieldVal);

}catch(IllegalAccessExceptione){

e.printStackTrace();

}

});

}

}

4.結(jié)果輸出

反射對象獲取屬性和值憑借成string

描述

有些時候會用到把穿過來的對象用kv的形式拼接這個時候用反射就很不錯

直接上代碼

publicclassFanSeVo{

privateStringname;

privateStringid;

//.......

//如果是跟外部程序或者接口對接的話,下面還可以加2個屬性,一個是相互約定的秘鑰,一個//是排除秘鑰之后對屬性和值做憑借之后的MD5加密之后的值,可以做數(shù)據(jù)安全考慮,防止傳輸過程數(shù)據(jù)被篡改

}

packagecom.ycj.my_all_demo.fanse;

importjava.lang.reflect.Field;

importjava.util.HashMap;

*@authorycj

*@data17:55

publicclassFanSe{

publicstaticvoidmain(String[]args){

FanSeVofanSeVo=newFanSeVo("1","2");

Field[]fields=fanSeVo.getClass().getDeclaredFields();

HashMapString,Stringmap=newHashMap();

for(Fieldfield:fields){

field.setAccessible(true);

try{

//把對象的屬性做k,值做v

//當(dāng)然中間還可做其他的業(yè)務(wù)操作,比如跳過某些屬性什么的

Stringname=field.getName();

Strings=field.get(fanSeVo).toString();

map.put(name,s);

System.out.println();

}catch(Exceptione){

e.printStackTrace();

}

}

//吧map數(shù)據(jù)轉(zhuǎn)成str,kv的形式

StringstrByMap=getStrByMap(map);

System.out.println(strByMap);//name1id2

}

publicstaticStringgetStrByMap(HashMapString,Strin

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論