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

    最近在看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;
	}
}

转载于:https://my.oschina.net/u/660932/blog/116068

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值