使用具有多态性的Reflection实例化类的最佳方法是什么?

时间:2017-03-25 06:52:55

标签: java class reflection polymorphism command-pattern

  

我正在尝试在java中使用反射   使用命令模式实例化播放器,如下所示:

Command类中只有一个'执行'方法,
并且 InitiatePlayerCommand 作为其名称,它将实例化一个
根据构造函数中传递的 playerClass Player 的子类。

  

我有两种Player类的子类: HumanPlayer AiPlayer   对于多态性。

我希望它将实例化其中一个子类并添加到playerList

但我不知道使用Reflection实现这一目标的最佳方式是什么。它总是会发生类型错误。

ExchangeSort<int>* sortArray = new ExchangeSort<int>;

}

有没有办法在不使用Class&lt;?&gt;

的情况下到达

1 个答案:

答案 0 :(得分:1)

您应该考虑使用Supplier<T>,这是一个返回对象的无参数函数。

在这种情况下,您的Supplier可能会定义如下:

Supplier<Player> playerSupplier = () -> new HumanPlayer();

然后您可以像这样使用它:

public void execute() {
    Player player = playerSupplier.get();
    player.setName(name);
    player.setWarMode(warMode);
    playerList.add(player);
}