1

我有以下 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)

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

4

1 回答 1

7

Class#getConstructor(Object...)javadoc 状态

返回一个对象,该对象反映了该对象所代表的类Constructor的指定public 构造函数Class

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

使用getDeclaredConstructor(Object...).

于 2014-08-04T03:17:17.470 回答