List <T>返回一个对象集合

spa*_*ion 5 java generics inheritance

我今天在一个内部图书馆的一部分工作,并希望通过在我们的"游戏"课程中添加基本的泛型来改进一些东西.

这是现在改变的游戏类的精简版:

public abstract class Game<G extends GamePlayer> {
    private final List<G> players;

    public Game() {
        this.players = new LinkedList<>();
    }

    public Collection<G> getPlayers() {
        return players;
    }
}
Run Code Online (Sandbox Code Playgroud)

非常标准,我知道.但是当我想在这样的游戏模块中使用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);
            }
        }

    }
Run Code Online (Sandbox Code Playgroud)

ikh*_*ikh 5

你应该用这个:

private final Game<GamePlayer> game;
Run Code Online (Sandbox Code Playgroud)

你正在使用原始类型Game.