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

原创
2013/03/22 17:28
阅读数 1.2K

    最近在看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;
	}
}
展开阅读全文
打赏
1
8 收藏
分享
加载中
更多评论
打赏
0 评论
8 收藏
1
分享
返回顶部
顶部