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

标签 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;
    }
}

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

相关文章:

java - 通过 JBPM KIE 工作台控制台实现持久性

java - 从 Java 内部处理 Python IO

孙子的java spring继承(供应商/客户与外国/国家)

c++ - 从模板函数中缓存一个基类型以在 std::is_base_of<Here!,> 中使用

java - 是否有一个开源 java 库来连接图像扫描仪?

java - 如何在 Ognl 中编写循环?

java - "?"的类型删除是什么?

java - 如何在 java 中使用泛型来对对象执行相当于强制转换的操作?

用于通用记录的 Delphi TypeInfo

PHP:如何从父类调用子类的函数