Java中的反射-实现方法调用和获取字段名称

概念

Java的反射(reflection)机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射被视为动态语言的关键。

反射中常用的方法

参考https://www.jianshu.com/p/9be58ee20dee

案例实战

首先创建一个实体类

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 testList;
    private List excelList;
}

案例demo

 public static void main(String[] args) throws Exception {
        TestExcelModel testExcelModel = new TestExcelModel();
        testExcelModel.setCityName("山东");
        testExcelModel.setCountyName("济南");
        TestExcelModelList testExcelModelList = new TestExcelModelList();
        List 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)的时候不抛出异常,所以setAccessible为true
            field.setAccessible(true);
//            获取属性的名称
            String name = field.getName();
//            invoke 读取实体类的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("该方法的返回结果为:"+object);
        }
    }

打印结果

属性名字为:testList
方法名为:getTestList
该方法的返回结果为:[TestExcelModel(cityName=山东, countyName=济南)]
-----------------
属性名字为:excelList
方法名为:getExcelList
该方法的返回结果为:[TestExcelModel(cityName=山东, countyName=济南)]
-----------------

收工,学无止境,记录一下

你可能感兴趣的:(Java中的反射-实现方法调用和获取字段名称)