我正在从硬盘上读到一些工厂课程。
这些工厂没有公共建设者,他们有2个私人建设者: 一个用于反射的构造函数和一个用于创建的构造函数。
当只有一个公共构造函数时,此代码有效,但因为它引发了一个奇怪的异常:
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();
}
}
这是要检查的课程:
private POS_F_Calculator()
{
}
private POS_F_Calculator()
{
}
private POS_F_Calculator(StructureRepresentation representation)
{
this.representation = representation;
}
@Override
public ICalculator newCalculator(IRepresentation representation)
{
return new POS_F_Calculator((StructureRepresentation) representation);
}
以下是抛出的异常:
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)
我想弄清楚我做错了什么。这个例外是什么意思?
答案 0 :(得分:0)
经过一番研究后: 其中一个类中有一个Runnable实现,并被编译为匿名类 POS_F_Calculator $ 1
解决方案: 由于存在非常具体的命名,因此我将丢弃不使用该特定命名的类。
答案 1 :(得分:0)
构造函数c = klass.getDeclaredConstructor((Class [])null); / *这里有例外* /
这里你要说的是你想要的构造函数没有参数。 实际拥有的构造函数有一个参数:
私人POS_F_Calculator(StructureRepresentation表示)
所以电话应该是:
Constructor<?> c = klass.getDeclaredConstructor(StructureRepresentation.class);
答案 2 :(得分:-1)
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
throws NoSuchMethodException,
SecurityException
(类[])空
。如何将 null 投射到类!当null不是类
时