我有以下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
运行此代码,如果有帮助的话。
答案 0 :(得分:6)
Class#getConstructor(Object...)
javadoc州
返回反映指定
表示的类的构造函数Constructor
的{{1}}对象 由此public
对象
您的构造函数不是Class
。它没有访问修饰符,因此是包私有。
使用public
。