Class.getDeclaredConstructor是否仅返回公共构造函数?

时间:2013-06-07 06:36:04

标签: java reflection constructor

在此处查看此方法的文档:getDeclaredConstructor()

我看不到它的任何引用只返回公共构造函数。

我的问题是我有以下代码:

protected BaseClass internalCreate(String className) throws Exception {

    Class<? extends BaseClass> classObj = Class.forName(className)
                    .asSubclass(BaseClass.class);

    Constructor<?> ctor = classObj.getDeclaredConstructor((Class[]) null);
    ctor.setAccessible(true);

    return (BaseClass) ctor.newInstance();
}

为具有默认构造函数可见性(包私有)的类运行此方法时,我收到MissingMethod异常。将构造函数更改为public修复了该问题。

1 个答案:

答案 0 :(得分:5)

此方法返回类中声明的构造函数,public或not。但这并不意味着您可以使用返回的构造函数实例化实例,这就是您收到错误的原因。如果不允许访问,则调用此类构造函数上的setAccessible(true)。这与getDeclaredMethod和getDeclaredFields相同。