我從硬盤讀取了一些工廠類。如何從多個私人構造函數中反映私人構造函數
那些工廠沒有公共構造函數,它們有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)
我'我試圖弄清楚我做錯了什麼。這個例外是什麼意思?
嗯,這是事情我」一在堆棧溢出中已經看到了提示並被接受,並且它不是一個語法錯誤,因爲java編譯並運行它...它不適用於這部分代碼並且沒有它... –
當然 您可以。您可以將null轉換爲任何內容。 -1 – EJP