Java中的反射机制是指在运行时可以获取到class的方法名,属性以及对其赋值等等的操作。
下面简单举例实现一下。
首先定义简单的person JavaBean如下:
package com.sgx.reflect;
public class Person {
private String name;
private String score;
private String hobby;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getScore() {
return score;
}
public void setScore(String score) {
this.score = score;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
}
然后是测试部分:
package com.sgx.reflect;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Reflect {
public static void test(Object o) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
Class clazz = o.getClass();
Field[] fields = clazz.getDeclaredFields();
for(int i=0;i<fields.length;i++){
String attrName = fields[i].getName();//获取属性名称
System.out.println("attrName=="+attrName);
String methodName = "set"+attrName.substring(0,1).toUpperCase()+attrName.substring(1);
Method method = clazz.getMethod(methodName, new Class[]{String.class});
method.invoke(o,new Object[]{i+""});
}
}
public static void main(String[]args) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
Reflect rf =new Reflect();
Person p = new Person();
rf.test(p);
System.out.println(p.getName());
System.out.println(p.getScore());
System.out.println(p.getHobby());
}
}
测试结果如下:
attrName==name
attrName==score
attrName==hobby
0
1
2