我今天正在处理一个内部库的一部分,想通过向我们的“游戏”类添加基本泛型来改进一些东西。
这是游戏类的精简版本,现在已更改:
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())
它给我的只是一个错误,返回类型等于“Collection<Object>
”而不是“Collection<G>
”。
我拥有的所有其他函数(如 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);
}
}
}
最佳答案
你应该使用这个:
private final Game<GamePlayer> game;
您使用的是 Game
的原始类型。
关于java - List<T> 返回一个对象集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22758851/