使用java反射机制动态调用javabean的get,set方法

Posted keivi233

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用java反射机制动态调用javabean的get,set方法相关的知识,希望对你有一定的参考价值。

转自:https://blog.csdn.net/lixinyao5281/article/details/70146177?locationNum=14&fps=1&t=1493276880979

使用反射机制动态调用dto的get方法根据参数 属性名 如 name 调用dto的 getName方法 并获得返回值
Object getValue(Object dto, String name) throws Exception {
//getMethods()返回所有类或接口
Method[] m = dto.getClass().getMethods();
for (int i = 0; i < m.length; i++) {
//toLowerCase()使用默认语言环境的规则将此 String 中的所有字符都转换为小写
if (("set" + name).toLowerCase().equals(m[i].getName().toLowerCase())) {
//invoke对方法进行调用
return m[i].invoke(name);
}
}
return null;
}

invoke

public Object invoke(Object obj,
                     Object... args)
              throws IllegalAccessException,
                     IllegalArgumentException,
                     InvocationTargetException
对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。

如果底层方法是静态的,那么可以忽略指定的 obj 参数。该参数可以为 null。

如果底层方法所需的形参数为 0,则所提供的 args 数组长度可以为 0 或 null。

如果底层方法是实例方法,则使用动态方法查找来调用它,这一点记录在 Java Language Specification, Second Edition 的第 15.12.4.4 节中;在发生基于目标对象的运行时类型的重写时更应该这样做。

如果底层方法是静态的,并且尚未初始化声明此方法的类,则会将其初始化。

如果方法正常完成,则将该方法返回的值返回给调用者;如果该值为基本类型,则首先适当地将其包装在对象中。但是,如果该值的类型为一组基本类型,则数组元素 被包装在对象中;换句话说,将返回基本类型的数组。如果底层方法返回类型为 void,则该调用返回 null。

 

参数:
obj - 从中调用底层方法的对象
args - 用于方法调用的参数
返回:
使用参数 args 在 obj 上指派该对象所表示方法的结果





















以上是关于使用java反射机制动态调用javabean的get,set方法的主要内容,如果未能解决你的问题,请参考以下文章

java-反射

什么是Java反射机制,有什么作用

Java内省详解

java反射机制与动态代理

Java反射

JAVA基础整理-80.Java反射机制