Javaでテキストベースのゲームを作成して問題があります。
私は、というオブジェクトを持っています。extends Armor
は、extends Item
であり、これはimplements IEquipable
です。
オブジェクトをLinkedList
に追加してアクセスしようとすると、Item
オブジェクトになります。ポリモーフィズムに関するJavaリストの問題
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;
}
したがって、オブジェクトが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;
}
私はfor (Item item : items)
を使用し
java.lang.ClassCastException: DieWeltvonZuul.Item cannot be cast to DieWeltvonZuul.HeadArmor
であるかどうかを確認する方法
instanceOf
を使用することができます。 – xenterosアイテムにアクセスするために別のインデックスを使用している理由はありませんか?あなたはすでにあなたのfor-eachループに手元にある正しいアイテムを手に入れています... – dpr
[mcve]を投稿した方がずっと簡単です – xenteros