1.测试用Person类
package reflect;
/**
* Created by Administrator on 2018/5/10.
*/
public class Person {
private Integer id;
private String name;
private String address;
public Person() {
}
public Person(Integer id, String name, String address) {
this.id = id;
this.name = name;
this.address = address;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", address='" + address + '\'' +
'}';
}
}
2,Reflect测试类
import java.lang.reflect.*;
import java.util.Arrays;
/**
* Created by Administrator on 2018/5/10.
*/
public class ReflectTest {
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException {
Class<?> clazz=Person.class;//获取Person的Class
Field[] field=clazz.getDeclaredFields();//获取声明字段
Method[] methods=clazz.getDeclaredMethods();//获取声明方法
Constructor constructors=clazz.getConstructor(new Class[]{});//构造器
Object instance = constructors.newInstance(new Object[]{});//实例
System.out.println(instance);
for (Method m:methods){
if (m.getName().startsWith("set")){
System.out.println(m.getName());
String filedName = m.getName().substring(3).toLowerCase();
Field f = clazz.getDeclaredField(filedName);
Class<?> fclass = f.getType();
if(fclass==Integer.class){
m.invoke(instance,new Object[]{1});
}
if (fclass==String.class&&filedName.equals("name")){
m.invoke(instance,new Object[]{"张三"});
}
if (fclass==String.class && filedName.equals("address")){
m.invoke(instance,new Object[]{"上海"});
}
// m.invoke(instance,new Object[]{1});
}
}
System.out.println(instance.toString());
}
}
3、运行结果
4、给实例的字段赋值
Class<?> clazz = reqObj.getClass();//需要检测的类
Field[] fields=clazz.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
if(fields[i].getName().equals(mapKey.toString()))
{
fields[i].setAccessible(true);
fields[i].set(reqObj,map.get(mapKey).toString()); //给实例对象的字段赋值
}
}
}
调用制定的方法
handlerBean.getClass().getMethod("handler", String.class, String.class).invoke(handlerBean, mqErrorLogDO.getMsgId(), mqErrorLogDO.getMessageContent());