我有一個目錄,看起來像這樣:在Java中,我如何在不知道名稱的情況下加載類?
src
|
|__ProblemTester.java
|
|__problems
|
|__AbstractProblem.java
|
|__Problem1.java
|
|__Problem2.java
|
|__Problem3.java
所有的類都擴展AbstractProblem
。我想要一個函數,其輸入int n
並返回ProblemN.java
(作爲測試框架的一部分)的實例。這可能嗎?
到目前爲止我的代碼:(很粗糙)
class ProblemTester {
Class<? extends AbstractProblem> problem;
ProblemTest(int number) throws IllegalArgumentException {
try {
problem = Class.forName("problems.Problem" + number);
} catch (ClassNotFoundException e) {
throw new IllegalArgumentException(String.format("Problem %d not found.", number));
}
}
不幸的是這引發錯誤Incompatible types. Required: Class<? extends AbstractProblem>. Found: Class<capture <?>>.
我該如何解決這個問題?是否有這樣的現有框架?我過去使用過Gradle,但我不認爲它會自動加載類,就像我希望這個函數做的那樣。謝謝。
* Class.forName(「problems.Problem」+ number); *求值爲number = 1?你的封裝結構不會在任何地方反映'Capture <>'。你也應該分享ProblemN模型 – nullpointer
我的意思是它評估爲「problems.Problem1」。我沒有聽說過Capture <>,我會查看它。 「分享ProblemN模型」是什麼意思? –
問題的定義1,2,3是我的意思。 – nullpointer