亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java反射如何獲取字段屬性值

 更新時間:2022年07月08日 16:49:02   作者:changerzhuo  
這篇文章主要介紹了Java反射如何獲取字段屬性值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Java反射獲取字段屬性值

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

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

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

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

案例

1. 父類

package com.carl.study.springboot.bean;?
import lombok.Data;
import lombok.experimental.Accessors;
?
/**
?* @author changez
?* @desc
?* @date 2019/3/10 11:30
?*/
@Data
@Accessors(chain = true)
public class BeanBasic {
?
?? ?private Integer id;
?? ?private Long createTime;
?? ?private Long updateTime;
}

2. 子類

package com.carl.study.springboot.bean;?
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;
?
/**
?* @author changez
?* @desc
?* @date 2019/3/10 11:17
?*/
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Accessors(chain = true)
public class Student extends BeanBasic{
?
?? ?private String name;
?? ?private String address;
}

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

package test.lombok;?
import com.carl.study.springboot.bean.Student;
import org.junit.Test;?
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
?
/**
?* @author changez
?* @desc Java反射獲取類的所有屬性.
?* @date 2019/3/10 11:41
?*/
public class LombokTest {
?
?? ?@Test
?? ?public void getParentField(){
?? ??? ?Student stu1 = new Student();
?? ??? ?stu1.setName("student-name")
?? ??? ??? ?.setAddress("student1-address")
?? ??? ??? ?.setId(1)
?? ??? ??? ?.setCreateTime(20190310140423L)
?? ??? ??? ?.setUpdateTime(20190310140423L)
?? ??? ?;
?
?? ??? ?Class clazz = Student.class;
?? ??? ?List<Field> allFields = new ArrayList<>(100);
?
?? ??? ?// 獲取當(dāng)前對象的所有屬性字段
?? ??? ?// clazz.getFields():獲取public修飾的字段
?? ??? ?// clazz.getDeclaredFields(): 獲取所有的字段包括private修飾的字段
?? ??? ?allFields.addAll(Arrays.asList(clazz.getDeclaredFields()));
?
?? ??? ?// 獲取所有父類的字段, 父類中的字段需要逐級獲取
?? ??? ?Class clazzSuper = 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 {
?? ??? ??? ??? ?// 獲取字段名稱
?? ??? ??? ??? ?String fieldName = field.getName();
?
?? ??? ??? ??? ?// 獲取指定對象的當(dāng)前字段的值
?? ??? ??? ??? ?Object fieldVal = field.get(stu1);
?? ??? ??? ??? ?System.out.println(fieldName+"="+fieldVal);
?? ??? ??? ?} catch (IllegalAccessException e) {
?? ??? ??? ??? ?e.printStackTrace();
?? ??? ??? ?}
?? ??? ?});
?? ?}
}

4. 結(jié)果輸出

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

描述

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

直接上代碼

public class FanSeVo {
? ? private String name;
? ? private String id;
? ? //.......
? ? // 如果是跟外部程序或者接口對接的話,下面還可以加2個屬性,一個是相互約定的秘鑰,一個//是排除秘鑰之后對屬性和值做憑借之后的MD5加密之后的值,可以做數(shù)據(jù)安全考慮,防止傳輸過程數(shù)據(jù)被篡改
}
package com.ycj.my_all_demo.fanse;
import java.lang.reflect.Field;
import java.util.HashMap;
/**
?* @author ycj
?* @data 17:55
?*/
public class FanSe {
? ? public static void main(String[] args) {
? ? ? ? FanSeVo fanSeVo = new FanSeVo("1", "2");
? ? ? ? Field[] fields = fanSeVo.getClass().getDeclaredFields();
? ? ? ? HashMap<String, String> map = new HashMap<>();
? ? ? ? for (Field field : fields) {
? ? ? ? ? ? field.setAccessible(true);
? ? ? ? ? ? try {
? ? ? ? ? ? // 把對象的屬性做k,值做v
? ? ? ? ? ? // 當(dāng)然中間還可做其他的業(yè)務(wù)操作,比如跳過某些屬性什么的
? ? ? ? ? ? ? ? String name = field.getName();
? ? ? ? ? ? ? ? String s = field.get(fanSeVo).toString();
? ? ? ? ? ? ? ? map.put(name,s);
? ? ? ? ? ? ? ? System.out.println();
? ? ? ? ? ? } catch (Exception e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? // 吧map數(shù)據(jù)轉(zhuǎn)成str,kv的形式
? ? ? ? String strByMap = getStrByMap(map);
? ? ? ? System.out.println(strByMap);//name1id2
? ? }
? ? public static String getStrByMap(HashMap<String, String> map){
? ? ? ? StringBuilder str = new StringBuilder();
? ? ? ? map.forEach((k,v)->{str.append(k).append(v);});
? ? ? ? return str.toString();
? ? }
}

總結(jié),其實(shí)反射也不難,遇到什么多寫幾遍就好了

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java Enum的簡單使用

    Java Enum的簡單使用

    這篇文章主要為大家詳細(xì)介紹了Java Enum的簡單使用,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • java實(shí)現(xiàn)oracle插入當(dāng)前時間的方法

    java實(shí)現(xiàn)oracle插入當(dāng)前時間的方法

    這篇文章主要介紹了java實(shí)現(xiàn)oracle插入當(dāng)前時間的方法,以實(shí)例形式對比分析了java使用Oracle操作時間的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • 詳解Java中字符流與字節(jié)流的區(qū)別

    詳解Java中字符流與字節(jié)流的區(qū)別

    這篇文章主要為大家詳細(xì)介紹了Java中字符流與字節(jié)流的區(qū)別,這兩個的概念易混淆,今天就為大家進(jìn)行詳細(xì)區(qū)分,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 重新實(shí)現(xiàn)hashCode()方法

    重新實(shí)現(xiàn)hashCode()方法

    hashCode()是Java中的一個重要方法,用于計(jì)算對象的哈希碼。本文介紹了如何重新實(shí)現(xiàn)hashCode()方法,包括使用對象的屬性計(jì)算哈希碼、使用字符串拼接計(jì)算哈希碼、使用隨機(jī)數(shù)計(jì)算哈希碼等方法。同時,還介紹了如何避免哈希沖突,提高哈希表的效率。
    2023-04-04
  • java后臺調(diào)用接口及處理跨域問題的解決

    java后臺調(diào)用接口及處理跨域問題的解決

    這篇文章主要介紹了java后臺調(diào)用接口,處理跨域的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Mybatis的if從句中的賦值烏龍

    Mybatis的if從句中的賦值烏龍

    本文主要介紹了Mybatis的if從句中的賦值烏龍,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • Java中空指針異常該如何避免詳解

    Java中空指針異常該如何避免詳解

    空指針(Null Pointer Exception,NPE)是Java中最常見不過的異常了,其原因雖然顯而易見,但是開發(fā)人員往往會忽略,或未能及時采取措施,下面這篇文章主要給大家介紹了關(guān)于Java中空指針異常該如何避免的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • java讀取zip/jar包中文件的幾種方式

    java讀取zip/jar包中文件的幾種方式

    這篇文章主要給大家介紹了關(guān)于java讀取zip/jar包中文件的幾種方式,在我們?nèi)粘J褂弥袎嚎s文件是非常常用的,文中通過示例代碼將java讀取zip/jar包中文件的方法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • Java實(shí)現(xiàn)迅雷地址轉(zhuǎn)成普通地址實(shí)例代碼

    Java實(shí)現(xiàn)迅雷地址轉(zhuǎn)成普通地址實(shí)例代碼

    本篇文章主要介紹了Java實(shí)現(xiàn)迅雷地址轉(zhuǎn)成普通地址實(shí)例代碼,非常具有實(shí)用價值,有興趣的可以了解一下。
    2017-03-03
  • 解決spring boot環(huán)境切換失效的問題

    解決spring boot環(huán)境切換失效的問題

    這篇文章主要介紹了解決spring boot環(huán)境切換失效的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論