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



我有以下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运行这段代码,如果有帮助的话。

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

返回一个反映指定publicConstructor对象由Class对象表示的类的构造函数

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

使用getDeclaredConstructor(Object...)

相关内容

  • 没有找到相关文章

最新更新