자바로 텍스트 기반 게임을 작성하고 문제가 있습니다.
이 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
인 지 확인할 수 없습니다. 나는 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;
}
나는
java.lang.ClassCastException: DieWeltvonZuul.Item cannot be cast to DieWeltvonZuul.HeadArmor
논리에 문제가 있습니다인지 여부를 확인하는 방법
instanceOf
를 사용할 수 있습니다. – xenteros별도의 색인을 사용하여 항목에 액세스하는 이유가 명확하지 않습니다. 이미 for-each 루프에서 올바른 아이템을 얻었습니다 ... – dpr
[mcve]를 게시하면 훨씬 쉬워 질 것입니다 – xenteros