gpt4 book ai didi

java - 在Java中,如何在不提前知道名称的情况下加载类?

转载 作者:行者123 更新时间:2023-11-30 06:31:48 25 4
gpt4 key购买 nike

我有一个如下所示的目录:

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,但我不认为它会像我希望这个函数那样自动加载类。谢谢。

最佳答案

我可能是错的,但据我所知,泛型并不意味着用作元类型(对于类),所以你可以做的是,将你的问题声明为:

AbstractProblem problem;

然后:

Class clazz = Class.forName("Problem" + number);
problem = (AbstractProblem) clazz.newInstance();

关于java - 在Java中,如何在不提前知道名称的情况下加载类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45929754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com