Discuss / Java / 使用反射动态调用实例字段、方法、构造函数

使用反射动态调用实例字段、方法、构造函数

Topic source

余建材

#1 Created at ... [Delete] [Delete and Lock User]
class Person {
    private String name;
    private int age;
    public Person (String name){
        this.name = name;
    }

    public Person (String name, int age){
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    private void setName(String name){
        this.name = name;
    }
}
Person p = new Person("Xiao Ming");
System.out.println(p.getName());

Class c = p.getClass();

//动态更新私有字段
Field f = c.getDeclaredField("name");
f.setAccessible(true);
f.set(p, "new name xxxj");
System.out.println(p.getName());


// 动态调用私有方法
Method m = c.getDeclaredMethod("setName", String.class);
m.setAccessible(true);
m.invoke(p, "setName called");
System.out.println(p.getName());

//动态调用构造方法
Constructor cons1 = c.getConstructor(String.class);
Person person2 = (Person) cons1.newInstance("name2");
System.out.println(person2.getName());

Constructor cons2 = c.getConstructor(String.class, int.class);
Person person3 = (Person) cons2.newInstance("name3", 123);
System.out.println(person3.getName());
System.out.println(person3.getAge());


  • 1

Reply