最近在看Java的反射,把学习的东西整理一下,大家共同研究,有需要改进的地方,请大家指正。
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectionTest {
public static void main(String args[]) {
try {
//通过反射获得类
Class clazz = Class.forName("User");
//实例化类
Object obj = clazz.newInstance();
//获得类的所有属性
Field[] fields = clazz.getDeclaredFields();
for(Field f : fields){
PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
//获得写方法
Method wM = pd.getWriteMethod();
//获得读方法
Method rM = pd.getReadMethod();
//获得方法的参数,因为是标准的set方法,所以只取第一个参数
Class[] classes = wM.getParameterTypes();
//判断参数不为空,则只有一个
if(classes != null && classes.length == 1){
//判断参数类型
if(classes[0].equals(String.class)){
//调用set方法,传参
wM.invoke(obj, "Jack");
//调用get方法,获得返回值
String str = (String) rM.invoke(obj);
System.out.println("Name is : " + str);
}
if(classes[0].equals(int.class)){
wM.invoke(obj, 2);
Integer num = (Integer) rM.invoke(obj);
System.out.println("Age is : " + num);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
class User {
private String Name;
private int age;
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}