私はこのようになりますディレクトリを持っている: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"と評価することを意図していました。私はキャプチャ<>について聞いていない、私はそれを探します。 「ProblemN modelsを共有する」とはどういう意味ですか? –
問題1,2,3の定義は私が意味したものです。 – nullpointer