为什么Java Reflection不能在另一个包中找到类的包私有构造函数?

时间:2014-08-04 03:14:06

标签: java reflection constructor nosuchmethod

我有以下API代码,为简洁起见缩短了:

public class Vec
{
    Vec(int x, int y, int z) {/*implementation*/}
    //other fields and methods irrelevant to question and not shown
}

现在,我正在尝试在与上面的类不同的包中编写代码,该类使用反射来调用该类的构造函数并创建它的新实例。这是我尝试过的(下面的代码在我的应用程序的main方法中):

Constructor<Vec> c = Vec.class.getConstructor(Integer.TYPE, Integer.TYPE, Integer.TYPE);
c.setAccessible(true);
Vec newVec = c.newInstance(1, 2, 3);

但是,运行上面的代码时,后一代码的第一行会出现异常:

Exception in thread "main" java.lang.NoSuchMethodException: somePackages.Vec.<init>(int, int, int)

为什么它仍然提供该异常,即使该构造函数仍然存在?我在我的Raspberry Pi上使用oracle-java8-jdk运行此代码,如果有帮助的话。

1 个答案:

答案 0 :(得分:6)

Class#getConstructor(Object...) javadoc州

  

返回反映指定Constructor的{​​{1}}对象   由此public对象

表示的类的构造函数

您的构造函数不是Class。它没有访问修饰符,因此是包私有。

使用public