gpa*_*ani 0 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
}
Run Code Online (Sandbox Code Playgroud)
现在,我正在尝试在与上面的类不同的包中编写代码,该类使用反射来调用该类的构造函数并创建它的新实例.这是我尝试过的(下面的代码在我的应用程序的main方法中):
Constructor<Vec> c = Vec.class.getConstructor(Integer.TYPE, Integer.TYPE, Integer.TYPE);
c.setAccessible(true);
Vec newVec = c.newInstance(1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
但是,运行上面的代码时,后一代码的第一行会出现异常:
Exception in thread "main" java.lang.NoSuchMethodException: somePackages.Vec.<init>(int, int, int)
Run Code Online (Sandbox Code Playgroud)
为什么它仍然提供该异常,即使该构造函数仍然存在?我正在使用oracle-java8-jdk我的Raspberry Pi 运行此代码,如果这有帮助的话.
Class#getConstructor(Object...) 贾瓦多克说
返回一个
Constructor对象,该对象反映public此Class对象表示的类的指定构造函数
你的构造函数不是public.它没有访问修饰符,因此是包私有的.
使用getDeclaredConstructor(Object...).