最近在看Java的反射,把学习的东西整理一下,你们共同研究,有须要改进的地方,请你们指正。 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; } }