Kea*_*Hie 0 java casting class
我使用一种方法从包中收集所有类并将它们保存到一个数组中:
Class[] classes = ClassUtils.getClasses("xyz.keahie.werewolf.character.characters");
Run Code Online (Sandbox Code Playgroud)
它们都有"Character"类作为超类,当我打印它们时,我得到这一行:
class xyz.keahie.werewolf.character.Character
Run Code Online (Sandbox Code Playgroud)
当我想将它们转换为类"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)
Run Code Online (Sandbox Code Playgroud)
在这里我的源代码:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
很抱歉在开始时缺少信息
您无法从投Class<Character>来Character.前者描述了后者的类.
您可以使用Class.newInstance获取提供的实例Character具有不带参数的构造函数:
Character character = (Character) object.newInstance();
Run Code Online (Sandbox Code Playgroud)
或者,如果您的Character类需要构造函数参数,则可以使用反射.看到这个问题:使用接受字符串参数的构造函数实例化一个类对象?
如果需要从中实例化一个对象,我会仔细重新考虑你的软件设计,Class<?>因为它很少需要.
命名你的班级要小心Character.java.lang.Character可能有冲突.java.lang始终自动导入,因此您有两个具有相同名称且冲突的类.最好避免使用java.lang因此原因而存在的任何类名.
为避免这种情况,您可以使用包名完全限定类,如下所示:
xyz.keahie.werewolf.character.Character
Run Code Online (Sandbox Code Playgroud)
最好为您的班级选择一个不太模糊的名称.GameCharacter,PlayerCharacter或者RpgCharacter可能是更好的选择.
| 归档时间: |
|
| 查看次数: |
2919 次 |
| 最近记录: |