经过get、set方法,动态生成对象

    最近在看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;
	}
}
相关文章
相关标签/搜索