Java中的反射-實(shí)現(xiàn)方法調(diào)用和獲取字段名稱

概念

Java的反射(reflection)機(jī)制是指在程序的運(yùn)行狀態(tài)中,可以構(gòu)造任意一個(gè)類的對象,可以了解任意一個(gè)對象所屬的類,可以了解任意一個(gè)類的成員變量和方法,可以調(diào)用任意一個(gè)對象的屬性和方法。這種動(dòng)態(tài)獲取程序信息以及動(dòng)態(tài)調(diào)用對象的功能稱為Java語言的反射機(jī)制。反射被視為動(dòng)態(tài)語言的關(guān)鍵。

反射中常用的方法

參考http://www.itdecent.cn/p/9be58ee20dee

案例實(shí)戰(zhàn)

首先創(chuàng)建一個(gè)實(shí)體類

package com.mrhy.springaopbean.model;
import lombok.Data;
@Data
public class TestExcelModel {
    private String cityName;
    private String countyName;
}

再封裝一層

import lombok.Data;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

@Data
public class TestExcelModelList {
    private List<TestExcelModel> testList;
    private List<TestExcelModel> excelList;
}

案例demo

 public static void main(String[] args) throws Exception {
        TestExcelModel testExcelModel = new TestExcelModel();
        testExcelModel.setCityName("山東");
        testExcelModel.setCountyName("濟(jì)南");
        TestExcelModelList testExcelModelList = new TestExcelModelList();
        List<TestExcelModel> list = new ArrayList<>();
        list.add(testExcelModel);
        testExcelModelList.setExcelList(list);
        testExcelModelList.setTestList(list);
//        獲取testExcelModelList的類
        Class clazz = testExcelModelList.getClass();
        for (Field field : clazz.getDeclaredFields()) {
//           為了 讓field.get(testExcelModelList)的時(shí)候不拋出異常,所以setAccessible為true
            field.setAccessible(true);
//            獲取屬性的名稱
            String name = field.getName();
//            invoke 讀取實(shí)體類的get方法
            String methodName = "get" + name.substring(0, 1).toUpperCase() + name.substring(1);
            Method method = clazz.getMethod(methodName);
            Object object = method.invoke(testExcelModelList);
            System.out.println("屬性名字為:"+name);
            System.out.println("方法名為:"+methodName);
            System.out.println("該方法的返回結(jié)果為:"+object);
        }
    }

打印結(jié)果

屬性名字為:testList
方法名為:getTestList
該方法的返回結(jié)果為:[TestExcelModel(cityName=山東, countyName=濟(jì)南)]
-----------------
屬性名字為:excelList
方法名為:getExcelList
該方法的返回結(jié)果為:[TestExcelModel(cityName=山東, countyName=濟(jì)南)]
-----------------

收工,學(xué)無止境,記錄一下

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容