【发布时间】:2018-02-06 08:35:53
【问题描述】:
我有一个如下所示的目录:
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,但我认为它不会像我希望这个函数那样自动加载类。谢谢。
【问题讨论】:
-
对于 number=1,Class.forName("problems.Problem" + number); 的计算结果是什么?您的包结构不会在任何地方反映
Capture<>。你也应该分享 ProblemN 模型 -
我的意思是让它评估为“problems.Problem1”。我还没有听说过 Capture,我会查一下。 “分享 ProblemN 模型”是什么意思?
-
问题1、2、3的定义就是我的意思。
-
它们是相当简单的测试用例。它们具有局部变量,例如 testInputOne 和 expectedResultOne。我正计划开设很多类似的课程,所以我宁愿开设一个大型测试班,也不愿开设一打较小的测试班。
-
问的不是他们的属性而是类的定义,他们都扩展
AbstractProblem吗?
标签: java class dynamic syntax dynamic-class-loaders