gpt4 book ai didi

java - 如何将Java类转换为另一个类

转载 作者:行者123 更新时间:2023-12-01 07:47:44 25 4
gpt4 key购买 nike

我使用一种方法从包中收集所有类并将它们保存到数组中:

Class[] classes = ClassUtils.getClasses("xyz.keahie.werewolf.character.characters");

它们都有“Character”类作为父类(super class),当我打印它们时,我得到这一行:

class xyz.keahie.werewolf.character.Character

当我想将它们转换为“Character”类时,我总是会遇到 ClassCastException。我做错了什么?

编辑:这是我得到的完整错误:

Exception in thread "main" java.lang.ClassCastException: java.lang.Class cannot be cast to xyz.keahie.werewolf.character.Character
at xyz.keahie.werewolf.character.CharacterManager.<init>(CharacterManager.java:29)
at xyz.keahie.werewolf.GameManager.<init>(GameManager.java:26)
at xyz.keahie.werewolf.Game.main(Game.java:9)

这是我的源代码:

Class[] classes = ClassUtils.getClasses("xyz.keahie.werewolf.character.characters");
for (Class clazz : classes) {
Object object = clazz.getSuperclass();
System.out.println(object.toString());

if (object.getClass().equals(xyz.keahie.werewolf.character.Character.class)) {
System.out.println("Yes");
} else {
System.out.println("Nope");
}

Character character = (Character) object;
if (!this.characters.contains(character)) {
addSpecialCharacter(character);
}
}

抱歉开头缺少信息

最佳答案

您无法从 Class<Character> 进行转换至Character 。前者描述了后者的

您可以使用Class.newInstance获取提供的实例 Character有一个不带参数的构造函数:

Character character = (Character) object.newInstance();

或者,如果您的 Character 则可以使用反射类需要构造函数参数。看这个问题:Instantiate a class object with constructor that accepts a string parameter?

如果需要从 Class<?> 实例化一个对象,我会仔细重新考虑您的软件设计。因为很少需要它。

<小时/>

命名你的类时要小心 Character java.lang.Character 可能会发生冲突。 java.lang 总是自动导入,因此您有两个同名的类存在冲突。最好避免使用 java.lang 中已存在的任何类名。因此。

为了避免这种情况,您可以使用包名称完全限定该类,如下所示:

xyz.keahie.werewolf.character.Character

最好为您的类选择一个不太模糊的名称。 GameCharacter , PlayerCharacterRpgCharacter可能是更好的选择。

关于java - 如何将Java类转换为另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48075726/

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