大家好,又见面了,我是你们的朋友全栈君。
今天在项目研发的过程中遇到这样一个需求,在一个统一处理类的入口要将所有后面处理流程需要用到的值统一塞进上下文的MAP对象中,这其中就包括了一持久层的DO对象。 如果对于对象进行逐个遍历是可以实现这个需求,但代码量比较大,所以一直在寻求一种比较合理的处理方式。后来发现可以通过反射的方式实现这个功能。
这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Class cla = obj.getClass
Class cla = String.class
Class cla = Class.forName(xxx.xxx.Student)
关键字 | 含义 |
---|---|
getDeclaredMethods() | 获取所有的方法 |
getDeclareFields() | 获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段 |
getFields() | 获得某个类的所有的公共(public)的字段,包括父类中的字段 |
getDeclaredField(String name) | 返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段 |
getReturnType() | 获得方法的放回类型 |
getParameterTypes() | 获得方法的传入参数类型 |
getDeclaredMethod(“方法名”,参数类型.class,……) | 获得特定的方法 |
构造方法关键字 | 含义 |
---|---|
getDeclaredConstructors() | 获取所有的构造方法 |
getDeclaredConstructor(参数类型.class,……) | 获取特定的构造方法 |
父类和父接口 | 含义 |
---|---|
getSuperclass() | 获取某类的父类 |
getInterfaces() | 获取某类实现的接口 |
参考实例 反射实例链接
package source.reflect;
public class TestReflect {
private String no;
private String name;
private int age;
public TestReflect(String no, String name, int age) {
super();
this.no = no;
this.name = name;
this.age = age;
}
public String getNo() {
return no;
}
public void setNo(String no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package source.reflect;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
public class TestObjToMap {
public static Map<String, Object> convertObjToMap(Object obj) throws Exception{
Map<String, Object> map = new HashMap<String, Object>();
Field[] fields = obj.getClass().getDeclaredFields();
for(int i = 0; i < fields.length; i++){
Field field = obj.getClass().getDeclaredField(fields[i].getName());
field.setAccessible(true);
Object value = field.get(obj);
map.put(fields[i].getName(), value);
}
return map;
}
public static void main(String[] args) throws Exception {
TestReflect testReflect = new TestReflect("1", "test", 20);
Map<String, Object> map = convertObjToMap(testReflect);
System.out.println(map);
}
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/131985.html原文链接:https://javaforall.cn
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有