Skip to content

要调用构造方法,可以使用 Java 的反射 API 中的·newInstance()·方法。下面是一个示例代码,展示了如何使用反射调用构造方法:

import java.lang.reflect.Constructor;

public class ReflectionExample {
    public static void main(String[] args) {
        try {
            // 获取构造方法对象
            Constructor<MyClass> constructor = MyClass.class.getDeclaredConstructor();

            // 设置构造方法可访问性
            constructor.setAccessible(true);

            // 调用构造方法创建对象
            MyClass myObject = constructor.newInstance();

            // 打印对象
            System.out.println(myObject);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class MyClass {
    private MyClass() {
        System.out.println("MyClass 构造方法被调用");
    }
}

在上面的示例中,我们使用getDeclaredConstructor()方法获取了MyClass类的构造方法对象。然后,我们使用setAccessible(true)方法设置构造方法的可访问性,以便我们可以调用非public构造方法。最后,我们使用newInstance()方法调用构造方法创建了一个对象,并打印了该对象。

请注意,getDeclaredConstructor()方法中的参数可以根据构造方法的参数类型进行指定,例如,如果构造方法有一个参数为int类型,可以使用getDeclaredConstructor(int.class)

Constructor 对象

Constructor对象是 Java 反射 API 中的一个类,它代表了一个类的构造方法。通过Constructor对象,我们可以调用构造方法来创建对象实例。

要获取一个类的构造方法的Constructor对象,可以使用 Class类的getDeclaredConstructor()方法。这个方法接受一个参数列表,用于指定构造方法的参数类型。如果构造方法有参数,你需要根据参数类型的顺序传入相应的Class对象。下面是一个示例代码,展示了如何使用 Constructor对象来调用构造方法:

import java.lang.reflect.Constructor;

public class Main {
    public static void main(String[] args) throws Exception {
        // 获取类的构造方法
        Class<?> clazz = MyClass.class;
        Constructor<?> constructor = clazz.getDeclaredConstructor(int.class, String.class);

        // 设置构造方法可访问性
        constructor.setAccessible(true);

        // 调用构造方法创建对象
        Object obj = constructor.newInstance(123, "Hello");

        // 输出对象
        System.out.println(obj);
    }
}

class MyClass {
    private int id;
    private String name;

    public MyClass(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public String toString() {
        return "MyClass{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}

在上面的示例中,我们使用getDeclaredConstructor(int.class, String.class)方法获取了MyClass类的带有 intString参数的构造方法的Constructor对象。然后,我们使用setAccessible(true)方法将构造方法设置为可访问。最后,我们使用newInstance(123, "Hello")方法调用构造方法创建了一个MyClass对象,并将其输出。