我今天在内部图书馆的一部分工作,并希望通过在我们的游戏中添加基本的仿制药来改进一些东西。类。
这是现在已经改变的游戏类的精简版:
public abstract class Game<G extends GamePlayer> {
private final List<G> players;
public Game() {
this.players = new LinkedList<>();
}
public Collection<G> getPlayers() {
return players;
}
}
相当标准,我知道。但是当我想在这样的游戏模块中使用getPlayers()方法时:for (GamePlayer player : game.getPlayers())
所有它给我的是一个错误,返回类型等于&#34; Collection<Object>
&#34;而不是&#34; Collection<G>
&#34;。
我拥有的所有其他功能(如G getPlayer(String name)
)都会返回正确的类型,但不会返回getPlayers函数。
我真的想避免将这个库的实现强加给玩家
MyGamePlayer player = (MyGamePlayer) myGame.getPlayer("dummy")
。
我对仿制药做了什么错误?
修改
以下是包含for
循环的类:
public class GiftTask implements Runnable {
private final Game game;
private final Item[] items;
public GiftTask(Game game, List<Item> itemList) {
this.game = game;
this.items = itemList.toArray(new Item[itemList.size()]);
}
@Override
public void run() {
for (GamePlayer player : game.getPlayers()) { // This line has the error
player.getInventory().addItem(items);
}
}
}
答案 0 :(得分:5)
你应该用这个:
private final Game<GamePlayer> game;
您正在使用原始类型Game
。