gpt4 book ai didi

java - ClassName 为字符串时如何处理 "new Class"?

转载 作者:行者123 更新时间:2023-12-02 01:20:08 25 4
gpt4 key购买 nike

所以我正在制作一个迷你游戏,并希望在游戏重新启动时随机获得一个新的竞技场。每个竞技场都是一个 Java 类,因为每个竞技场上的数据都会发生变化,并且当我加载和卸载 map 时。

正如我当时在 ArrayList<String>并且需要做new Class每一次。它的字符串的原因是因为我不希望之前实例化该类,因为加载器位于每个 map 的构造函数中

我尝试过使用 class.forName()函数然后应用 newInstance()似乎没有帮助。

public class Arena {

private ArrayList<String> maps;
private Class currentMap;

public Arena() {
setMaps();
setNewMap();
}

private void setMaps() {
maps = new ArrayList<String>() {
{
add("Beach");
add("CandyLand");
add("Forest");
add("Frozen");
add("Space");
}
};
}

private void setNewMap() {
Random rand = new Random();
int n = rand.nextInt(4); // count includes 0

try {
currentMap = (Class) Class.forName(this.maps.get(n)).newInstance();
} catch (IllegalAccessException | ClassNotFoundException | InstantiationException e) {
e.printStackTrace();
}
}

public Class getCurrentMap() {
return currentMap;
}

public ArrayList<String> getMaps() {
return maps;
}
}

我希望得到与 new Class 相同的函数的结果做。只需从数组中获取类即可。

最佳答案

Class.forName(this.maps.get(n)).newInstance() 就可以了。当然,您不应该将其转换为 Class,因为它们不是 Class 的实例。你们的类有一个共同的基类吗?这就是要转换到的类。

您没有使用完全限定名称。也许你应该。

关于java - ClassName 为字符串时如何处理 "new Class"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57859378/

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