黑马程序员技术交流社区
标题:
内省操作
[打印本页]
作者:
支胜勇
时间:
2014-6-2 00:46
标题:
内省操作
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();
}
}
}
作者:
yuZhe_toString
时间:
2014-6-2 19:38
第一次看见这个类PropertyDescriptor
作者:
hengxing0079
时间:
2014-6-2 21:03
过来看看。正好我也学到这个位置
作者:
KevinSmart
时间:
2014-6-2 21:09
不错。setUserProperty方法可以用泛型封装的
作者:
支胜勇
时间:
2014-6-3 12:10
但是当我想传int类型的age时,却传不了,这是为什么?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2