中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java反射怎么獲取字段屬性值

發布時間:2022-07-12 14:34:07 來源:億速云 閱讀:794 作者:iii 欄目:開發技術

今天小編給大家分享一下Java反射怎么獲取字段屬性值的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

Java反射獲取字段屬性值

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

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

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

如果要獲取字段值, 則需要設置字段可訪問即: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);
 
        // 獲取當前對象的所有屬性字段
        // 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 -> {
 
            // 設置字段可訪問, 否則無法訪問private修飾的變量值
            field.setAccessible(true);
            try {
                // 獲取字段名稱
                String fieldName = field.getName();
 
                // 獲取指定對象的當前字段的值
                Object fieldVal = field.get(stu1);
                System.out.println(fieldName+"="+fieldVal);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        });
    }
}

4. 結果輸出

Java反射怎么獲取字段屬性值

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

描述

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

直接上代碼

public class FanSeVo {
    private String name;
    private String id;
    //.......
    // 如果是跟外部程序或者接口對接的話,下面還可以加2個屬性,一個是相互約定的秘鑰,一個//是排除秘鑰之后對屬性和值做憑借之后的MD5加密之后的值,可以做數據安全考慮,防止傳輸過程數據被篡改
}
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
            // 當然中間還可做其他的業務操作,比如跳過某些屬性什么的
                String name = field.getName();
                String s = field.get(fanSeVo).toString();
                map.put(name,s);
                System.out.println();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 吧map數據轉成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();
    }
}

以上就是“Java反射怎么獲取字段屬性值”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玛纳斯县| 漳州市| 读书| 东明县| 兴仁县| 蛟河市| 筠连县| 新源县| 秦安县| 祁连县| 武定县| 宾阳县| 大同市| 绥宁县| 乐安县| 林周县| 大宁县| 柳州市| 且末县| 常山县| 武平县| 唐山市| 临猗县| 惠水县| 西和县| 遂溪县| 北川| 子长县| 哈巴河县| 嫩江县| 永城市| 那坡县| 平罗县| 甘孜县| 百色市| 灵宝市| 太仓市| 杂多县| 枣阳市| 和静县| 台江县|