概念
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<TestExcelModel> testList;
private List<TestExcelModel> excelList;
}
案例demo
public static void main(String[] args) throws Exception {
TestExcelModel testExcelModel = new TestExcelModel();
testExcelModel.setCityName("山东");
testExcelModel.setCountyName("济南");
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)的时候不抛出异常,所以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=济南)]
-----------------
收工,学无止境,记录一下