最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java如何通過(guò)反射機(jī)制獲取數(shù)據(jù)類(lèi)對(duì)象的屬性及方法

 更新時(shí)間:2025年01月19日 15:21:23   作者:奕澎  
文章介紹了如何使用Java反射機(jī)制獲取類(lèi)對(duì)象的所有屬性及其對(duì)應(yīng)的get、set方法,以及如何通過(guò)反射機(jī)制實(shí)現(xiàn)類(lèi)對(duì)象的實(shí)例化,感興趣的朋友跟隨小編一起看看吧

一、通過(guò)反射機(jī)制獲取類(lèi)對(duì)象的所有屬性以及相應(yīng)的get、set方法

1.遍歷類(lèi)對(duì)象的所有屬性

//可以使用getDeclaredFields()方法獲取對(duì)象的所有屬性
AutoClass autoClass = new AutoClass();		// 先初始化一個(gè)類(lèi)
Field[] fields = autoClass.getClass().getDeclaredFields();	// 獲取對(duì)象的所有屬性
for (Field item : fields) {
    String name = item.getName();	// 獲取對(duì)象屬性名
    String typeName = item.getGenericType().getTypeName();	// 獲取對(duì)象屬性的類(lèi)型
    System.out.printf("屬性名:%s,類(lèi)型:%s\n", name, typeName);
}

2.獲取屬性的get、set方法

// 一般而言每個(gè)屬性都有其get和set方法
// 通過(guò)方法名獲取get方法
Method getMethod = autoClass.getClass().getMethod("getId");
// 調(diào)用get方法
String invoke = (String) getMethod.invoke(autoClass);
System.out.println(invoke);
// 通過(guò)方法名獲取set方法,由于set方法是有參數(shù)的,所以這里也需要定義set方法的參數(shù)類(lèi)型
Method setMethod = autoClass.getClass().getMethod("setId", String.class);
// 調(diào)用set方法
setMethod.invoke(autoClass, "gftz");
System.out.println(autoClass.getId());
// invoke方法中的autoClass表示autoClass這個(gè)指定對(duì)象調(diào)用相應(yīng)方法

二、通過(guò)反射機(jī)制實(shí)現(xiàn)類(lèi)對(duì)象的實(shí)例化

1.工具類(lèi)

package utils;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.util.Date;
/**
 * @description: 數(shù)據(jù)類(lèi)的相關(guān)操作
 * @author: 黃珺瑜
 * @create: 2022-07-07 22:05
 **/
// 由于為了讓這個(gè)工具類(lèi)能夠通用,故而用了泛型,對(duì)其不了解需要自行百度一下。
public class ObjectOperate<T> {
/**
 * 設(shè)置數(shù)據(jù)類(lèi)對(duì)象的屬性
 * @param obj   數(shù)據(jù)類(lèi)對(duì)象的實(shí)例
 * @param name  屬性名
 * @param type  屬性類(lèi)型名
 * @param val   需要存入的屬性值
 * @throws NoSuchMethodException
 * @throws InvocationTargetException
 * @throws IllegalAccessException
 */
    public void setValues(T obj, String name, String type, Object val) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        Method method = null;
        // 通過(guò)屬性類(lèi)型來(lái)獲取相應(yīng)的方法以及強(qiáng)制轉(zhuǎn)化屬性值并初始化相應(yīng)屬性
        // 這里考慮到了大部分常用的數(shù)據(jù)類(lèi)型,可拿來(lái)即用。
        switch (type){
            case "int":
                method = obj.getClass().getMethod(name, int.class);
                method.invoke(obj,(int)val);
                break;
            case "short":
                method = obj.getClass().getMethod(name, short.class);
                method.invoke(obj,(short)val);
                break;
            case "long":
                method = obj.getClass().getMethod(name, long.class);
                method.invoke(obj,(long)val);
                break;
            case "float":
                method = obj.getClass().getMethod(name, float.class);
                method.invoke(obj,(float)val);
                break;
            case "double":
                method = obj.getClass().getMethod(name, double.class);
                method.invoke(obj,(double)val);
                break;
            case "boolean":
                method = obj.getClass().getMethod(name, boolean.class);
                method.invoke(obj,(boolean)val);
                break;
            case "java.lang.String":
                method = obj.getClass().getMethod(name, String.class);
                method.invoke(obj,(String)val);
                break;
            case "java.util.Date":
                method = obj.getClass().getMethod(name, Date.class);
                method.invoke(obj,(Date)val);
                break;
            case "java.math.BigDecimal":
                method = obj.getClass().getMethod(name, BigDecimal.class);
                method.invoke(obj,(BigDecimal)val);
                break;
        }
    }
}

2、使用案例

// 模擬案例數(shù)據(jù)
List<Object> params = new ArrayList<>();
params.add(UUID.randomUUID().toString().replaceAll("-", ""));
params.add(18);
params.add(new Date());
params.add(false);
params.add(new BigDecimal(888888.8));
// 初始話類(lèi)型操作的工具類(lèi)
ObjectOperate<AutoClass> objectOperate = new ObjectOperate<>();
// AutoClass使用到上面的,故不再給出AutoClass類(lèi)
AutoClass autoClass = new AutoClass();
Field[] fields = autoClass.getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
    String name = fields[i].getName();	// 屬性名
    // 設(shè)置為屬性的set方法名,如:屬性名為id,對(duì)應(yīng)set方法名為setId
    name = "set"+name.substring(0, 1).toUpperCase() + name.substring(1);
    String typeName = fields[i].getGenericType().getTypeName();	//屬性類(lèi)型名
    try {
        objectOperate.setValues(autoClass,name,typeName,params.get(i));	// 初始化對(duì)象的屬性
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}
System.out.println(autoClass.toString());

到此這篇關(guān)于Java如何通過(guò)反射機(jī)制獲取數(shù)據(jù)類(lèi)對(duì)象的屬性及方法的文章就介紹到這了,更多相關(guān)java反射獲取數(shù)據(jù)類(lèi)對(duì)象的屬性?xún)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Cache實(shí)現(xiàn)緩存技術(shù)

    Spring Cache實(shí)現(xiàn)緩存技術(shù)

    在面對(duì)公司緩存技術(shù)混亂時(shí),張三基于Spring框架自研緩存解決方案,展現(xiàn)了他的專(zhuān)業(yè)技術(shù)能力和積極工作態(tài)度,他通過(guò)問(wèn)題診斷、技術(shù)選型、編碼測(cè)試、文檔編寫(xiě)和部署監(jiān)控等一系列步驟,確保了新緩存系統(tǒng)的功能正確性和性能穩(wěn)定性
    2024-10-10
  • 從零開(kāi)始Java實(shí)現(xiàn)Parser?Combinator

    從零開(kāi)始Java實(shí)現(xiàn)Parser?Combinator

    這篇文章主要為大家介紹了從零開(kāi)始Java實(shí)現(xiàn)Parser?Combinator過(guò)程及原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java中的ReadWriteLock讀寫(xiě)鎖實(shí)例詳解

    Java中的ReadWriteLock讀寫(xiě)鎖實(shí)例詳解

    Java中的ReadWriteLock讀寫(xiě)鎖,它是一種讀寫(xiě)分離的鎖機(jī)制,適用于讀多寫(xiě)少的場(chǎng)景,本文通過(guò)實(shí)例代碼給大家介紹Java中的ReadWriteLock讀寫(xiě)鎖,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Java Swing JFrame窗口的實(shí)現(xiàn)

    Java Swing JFrame窗口的實(shí)現(xiàn)

    這篇文章主要介紹了Java Swing JFrame窗口的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Windows10系統(tǒng)下修改jar中的文件并重新打包成jar文件然后運(yùn)行的操作步驟

    Windows10系統(tǒng)下修改jar中的文件并重新打包成jar文件然后運(yùn)行的操作步驟

    這篇文章主要介紹了Windows10系統(tǒng)下修改jar中的文件并重新打包成jar文件然后運(yùn)行的操作步驟,文中通過(guò)圖文結(jié)合的形式給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-08-08
  • IDEA運(yùn)行Java項(xiàng)目報(bào)錯(cuò)java: 錯(cuò)誤: 不支持發(fā)行版本 xx的解決方法

    IDEA運(yùn)行Java項(xiàng)目報(bào)錯(cuò)java: 錯(cuò)誤: 不支持發(fā)行版本 xx的解決方法

    這篇文章主要介紹了IDEA運(yùn)行Java項(xiàng)目報(bào)錯(cuò)java: 錯(cuò)誤: 不支持發(fā)行版本 xx的解決方法,文中有詳細(xì)的解決方案供大家參考,對(duì)大家解決問(wèn)題有一定的幫助,需要的朋友可以參考下
    2025-04-04
  • FineReport中自定義登錄界面的方法

    FineReport中自定義登錄界面的方法

    這篇文章主要介紹了 FineReport中自定義登錄界面的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • Spring Boot 接口參數(shù)加密解密的實(shí)現(xiàn)方法

    Spring Boot 接口參數(shù)加密解密的實(shí)現(xiàn)方法

    這篇文章主要介紹了Spring Boot 接口參數(shù)加密解密的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Spring?AOP?后置處理器使用方式

    Spring?AOP?后置處理器使用方式

    這篇文章主要介紹了Spring?AOP?后置處理器使用方式,文章圍繞主題相關(guān)內(nèi)容展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-05-05
  • Java并發(fā)統(tǒng)計(jì)變量值偏差原因及解決方案

    Java并發(fā)統(tǒng)計(jì)變量值偏差原因及解決方案

    這篇文章主要介紹了Java并發(fā)統(tǒng)計(jì)變量值偏差原因及解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評(píng)論

舞钢市| 舟山市| 无为县| 高密市| 巴中市| 开平市| 堆龙德庆县| 桓仁| 漳浦县| 瑞昌市| 湛江市| 镇平县| 奇台县| 台北县| 乌海市| 正蓝旗| 大石桥市| 射阳县| 固镇县| 建宁县| 德清县| 宣城市| 高邮市| 乌审旗| 申扎县| 城固县| 内江市| 郯城县| 苏尼特左旗| 龙泉市| 贵港市| 临沭县| 凤庆县| 威海市| 林西县| 沂南县| 简阳市| 麦盖提县| 威信县| 乐安县| 乐东|