我有一个如下所示的目录:
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,但我不认为它会自动加载类,就像我想要这个函数一样。感谢。
答案 0 :(得分:1)
我可能错了,但据我所知,泛型并不打算用作元类型(对于类),所以你可以做的是,将你的问题声明为:
AbstractProblem problem;
然后:
Class clazz = Class.forName("Problem" + number);
problem = (AbstractProblem) clazz.newInstance();