我正在尝试为我的朋友和我正在进行的游戏制作维护方法,基本上检查子弹是否在设定边界之外,然后将其从一个ArrayList(alive)移动到另一个(死)
我们有许多ArrayLists,包含从Bullet_Enemy类扩展的不同类型的项目符号。
维护类如下(使用Java):
public void maintenance(ArrayList<? extends Bullet_Enemy> aliveList, ArrayList<? extends Bullet_Enemy> deadList)
{ for(i = 0; i < aliveList.size(); i++)
{ if(aliveList.get(i).[Position] [is] [outside Boundary])
{ deadList.add(aliveList.get(i));
aliveList.get(i).reset();
aliveList.remove(i);
}
}
}
我遇到的问题是“deadList.add(aliveList.get(i));”行告诉我有一个错误:
"The method add(capture#33-of ? extends Bullet_Enemy) in the type ArrayList<capture#33-of ? extends Bullet_Enemy> is not applicable for the arguments (capture#34-of ? extends Bullet_Enemy)"
我不确定从哪里开始解决这个问题 - 即使在Google上搜索哪些条款也会有所帮助,就像有人解释为什么会出现这种问题一样。
谢谢!
答案 0 :(得分:0)
问题是这两个?
并不保证属于同一类型。
因此,您可以将ArrayList<Bullet_Enemy_SubClass1>
和ArrayList<Bullet_Enemy_SubClass2>
作为参数,但显然Bullet_Enemy_SubClass1
和Bullet_Enemy_SubClass2
不兼容。
假设您很高兴他们必须是同一类型,您可以通过制作方法签名来解决此问题:
public <T extends Bullet_Enemy> void maintenance(ArrayList<T> aliveList,
ArrayList<T> deadList)
但似乎您确实希望允许Bullet_Enemy
中的任何ArrayList
类型(不将这些类型限制为单一类型),在这种情况下您应该使用ArrayList<Bullet_Enemy>
:
public void maintenance(ArrayList<Bullet_Enemy> aliveList,
ArrayList<Bullet_Enemy> deadList)
这仍然允许向Bullet_Enemy_SubClass1
添加Bullet_Enemy_SubClass2
和ArrayList
,如果您想使用{{1}的方法,则必须投出它们}或Bullet_Enemy_SubClass1
,即:
Bullet_Enemy_SubClass2