package com.ItHeima.WeekAct;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
/**
* 第一题:内省操作,创建一个user实体,该对象包含name和age属性。通过内省给user对象设置name和age的值。
* @author 支胜勇
*
*/
public class Test1 {
public static class User{
private String name;//字段
private String age;
public String getName() {//读选择器
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {//写选择器
this.age = age;
}
public User(){
super();
}
}
/***
* 利用内省机制为User类中的name和age属性赋值,但在调用Mothod.invoke(Objec,Object[])时,第二个参数有问题,所以age设置为String
* @param name
* @param age
* @throws Exception
*/
public static void setUserProperty(String name,String age) throws Exception{
User myUser=new User();
//1.通过构造器来创建PropertyDescriptor对象
PropertyDescriptor propDesc=new PropertyDescriptor("name",User.class);
//2.通过该对象来获得写方法
Method method=propDesc.getWriteMethod();
Object nameArr[]=new Object[]{name};
//3.执行写方法
method.invoke(myUser,nameArr);
//重复以上操作获取设置age字段
propDesc=new PropertyDescriptor("age",User.class);
method=propDesc.getWriteMethod();
Object ageArr[]=new Object[]{age};
method.invoke(myUser, ageArr);
//4.输出对象字段的值
System.out.print("我叫"+myUser.getName()+";今年"+myUser.getAge()+"岁了!");
}
public static void main(String args[]) {
try {
setUserProperty("支胜勇","26");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
|
|