本帖最后由 王桂丽 于 2012-9-25 22:57 编辑
import java.lang.reflect.*;
import java.io.*;
import java.beans.PropertyDescriptor;
class IntroSpectTest
{
public static void main(String[] args) throws Exception
{
//通过反射方式获取
//获取构造方法
Constructor constructor=Person.class.getConstructor(String.class,int.class);
//新建实例对象
Person p=(Person)constructor.newInstance("zhangsan",23);
System.out.println(p.getName()+":"+p.getAge());//zhangsan:23
Field fieldX=p.getClass().getDeclaredField("name");
fieldX.setAccessible(true);
System.out.println(fieldX);//private java.lang.String Person.name
System.out.println(fieldX.get(p));//zhangsan
//通过JavaBean来操作
String propertyName="name";
setProperties(p,"name","zhansan");
System.out.println(getProperties(p,"name"));
}
private static void setProperties(Object p,String propertyName,Object value)throws Exception
{
//PropertyDescriptor属性描述符,表示一个类,这个方法接收两个参数,一个是属性名,一个是类的字节码
//得到了javabean的属性
PropertyDescriptor pd1=new PropertyDescriptor(propertyName,p.getClass());
//通过属性得到其读取方法
Method methodSetX=pd1.getWriteMethod();
//调用该方法invoke(对象,参数)
methodSetX.invoke(pd1,value);
}
private static Object getProperties(Object p,String propertyName)throws Exception
{
PropertyDescriptor pd2=new PropertyDescriptor(propertyName,p.getClass());
Method methodGetX=pd2.getReadMethod();
//调用该方法invoke(对象,参数),因为get方法不接收参数,参数为空
Person retVal=methodGetX.invoke(pd2);
return retVal;
}
}
class Person
{
private String name;
private int age;
public Person(String name,int age)
{
this.name=name;
this.age=age;
}
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public void setAge(int age)
{
this.age=age;
}
public int getAge()
{
return age;
}
}
疑问:运行时出的一点问题,不知道怎么修改。 |
|