- import java.beans.PropertyDescriptor;
- import java.lang.reflect.Field;
- public class Test5 {
- /**
- * @param args
- * 5、 定义一个标准的JavaBean,名叫Person,包含属性name、age。使用反射的方式创建一个实例、
- * 调用构造函数初始化name
- * 、age,使用反射方式调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值。
- */
- public static void main(String[] args) throws Exception{
- method_0();
- }
- /**
- * 定义方法,使用反射的方式创建一个实例、调用构造函数初始化name、age,
- * 使用反射方式调用setName方法对名称进行设置,不使用setAge方法直接使用反射方式对age赋值。
- */
- public static void method_0() throws Exception{
- // 反射创建Person的实例
- Person p1 = (Person)Person.class
- .getConstructor(String.class, int.class)
- .newInstance("Jack", 20);
- // 使用反射方式调用setName方法对名称进行设置
- String propertyNameX = "name";
- PropertyDescriptor pd = new PropertyDescriptor(propertyNameX,
- p1.getClass());
- pd.getWriteMethod().invoke(p1, "Tracy");
- System.out.println(p1);
- //不使用setAge方法直接使用反射方式对age赋值
- Field fieldAge = p1.getClass().getDeclaredField("age");
- fieldAge.setAccessible(true);
- fieldAge.set(p1,25);
- System.out.println(fieldAge.get(p1));
-
- }
- }
- // 创建Person类
- class Person {
- private String name;
- private int age;
-
- public Person(String name, int age) {
- super();
- this.name = name;
- this.age = age;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
-
- public String toString() {
- return name + "::" + age;
- }
-
- }
复制代码 帮你改过了!第一个问题是反射只能操作public修饰的成员,所以,你的Person的构造函数加上public就行了
第二个问题是,题目好像是对age赋值啊,我帮你加了一句代码
|