【发布时间】:2016-08-17 10:21:20
【问题描述】:
我想用 Java 编写一个基于文本的游戏,但遇到了一个问题。
我有一个HeadArmor 对象,extends Armor,extends Item 和这个implements IEquipable。
如果我将一个HeadArmor 对象添加到我的LinkedList 并尝试访问它,它就会变成一个Item 对象。
private LinkedList<Item> items = new LinkedList<Item>();
我如何将对象从列表中取出的方法。
public Item getItemByName(String name) {
int i = 0;
for (Item item : items) {
if (item.getName().equals(name)) {
//And the output is a Item Object and no HeadArmor
System.out.println(items.get(i).getClass().getName());
return items.get(i);
}
i++;
}
return null;
}
因此我无法检查我的 Object 是否是 HeadArmor 的实例。
public boolean equip(String name){
Item item = getItemByName(name);
//here he prints out I AM A DieWeltvonZuul.Item CLASS
System.out.println("I AM A "+item.getClass().getName()+ " CLASS");
if(item instanceof Weapon){
if (null != weapon) {
items.add(weapon);
weapon = (Weapon) item;
}else{
weapon = (Weapon) item;
}
}else{
//here he won't enter even the Object was at the beginning of type HeadArmor and this Object extends Armor
if (item instanceof Armor){
changeItem((IEquippable) getItemByName(name));
}else{
return false;
}
}
return true;
}
如果我尝试将它投射到 HeadArmor 上,我会得到 p>
java.lang.ClassCastException: DieWeltvonZuul.Item cannot be cast to DieWeltvonZuul.HeadArmor
【问题讨论】:
-
逻辑有问题。
-
您使用单独的索引来访问该项目是否有任何不明显的原因。您已经在 for-each 循环中获得了正确的项目...
-
您能添加用于创建项目的代码吗?
标签: java list polymorphism