Java 如何从多个私有构造函数中反映出一个私有构造函数
我从硬盘上读到了一些工厂的课程 这些工厂没有公共施工人员,他们有2名私人施工人员: 一个用于反射的构造函数和一个用于创建的构造函数 这段代码在只有一个公共构造函数时工作,但实际上它抛出了一个奇怪的异常:Java 如何从多个私有构造函数中反映出一个私有构造函数,java,reflection,constructor,Java,Reflection,Constructor,我从硬盘上读到了一些工厂的课程 这些工厂没有公共施工人员,他们有2名私人施工人员: 一个用于反射的构造函数和一个用于创建的构造函数 这段代码在只有一个公共构造函数时工作,但实际上它抛出了一个奇怪的异常: public static void setupCalculators() { String calculatorsBasePackage = "feature.calculators"; ArrayList<String> res; try {
public static void setupCalculators()
{
String calculatorsBasePackage = "feature.calculators";
ArrayList<String> res;
try
{
res = ReflectionHelper.getClassNamesFromPackage(calculatorsBasePackage);
for (String file : res)
{
file = file.replace("/", "");
Class<?> klass = Class.forName(calculatorsBasePackage + "." + file);
//The exception happens on the following line:
Constructor<?> c = klass.getDeclaredConstructor((Class[])null);
c.setAccessible(true);
ICalculatorFactory calculatorFactory =
(ICalculatorFactory) c.newInstance((Object[])null);
addCalculator(file.replace("_Calculator", ""), calculatorFactory);
}
}
catch (IOException | ClassNotFoundException | SecurityException |
IllegalArgumentException | InstantiationException |
IllegalAccessException | InvocationTargetException |
NoSuchMethodException e)
{
e.printStackTrace();
}
}
下面是抛出的异常:
java.lang.NoSuchMethodException: feature.calculators.POS_F_Calculator$1.<init>()
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getDeclaredConstructor(Unknown Source)
at feature.CalculatorHandler.setupCalculators(CalculatorHandler.java:37)
at driver.Driver.main(Driver.java:36)
java.lang.NoSuchMethodException:feature.calculators.POS\u F\u Calculator$1.()
位于java.lang.Class.getConstructor0(未知源)
位于java.lang.Class.getDeclaredConstructor(未知源)
位于feature.CalculatorHandler.setupCalculators(CalculatorHandler.java:37)
位于driver.driver.main(driver.java:36)
我在想我做错了什么。此异常是什么意思?公共构造函数getDeclaredConstructor(类…参数类型)
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
throws NoSuchMethodException,
SecurityException
抛出NoSuchMethodException,
安全例外
(类[])空
。如何将null转换为类!?当null不是一个类时经过一点研究: 其中一个类中有一个可运行的实现,并被编译成一个匿名类 POS_F_计算器$1 解决方案: 由于有一个非常特定的命名,我将丢弃不使用该特定命名的类 构造函数c=klass.getDeclaredConstructor((类[])null);/*例外情况来了*/ 这里你说你想要的构造函数没有参数。您实际拥有的构造函数有一个参数: 专用位置计算器(结构表示法) 因此,通话内容应为:
Constructor<?> c = klass.getDeclaredConstructor(StructureRepresentation.class);
构造函数c=klass.getDeclaredConstructor(StructureRepresentation.class);
这是我在stack overflow中看到的建议和接受的东西之一,它不是一个语法错误,因为java编译并运行它…它不能处理这部分代码,没有它也不行…抱歉,我没有注意到我没有复制这两个构造函数。我的错。我已编辑了问题。答案未更改。您没有正确指定构造函数参数列表。很抱歉,您错了。列表的指定是正确的,在我忽略了内部类和匿名类(编译时带有$sign的类)之后,所有这些都非常有效。
Constructor<?> c = klass.getDeclaredConstructor(StructureRepresentation.class);