我正在尝试在java中使用反射 使用命令模式实例化播放器,如下所示:
Command类中只有一个'执行'方法,
并且 InitiatePlayerCommand 作为其名称,它将实例化一个
根据构造函数中传递的 playerClass , Player 的子类。
我有两种Player类的子类: HumanPlayer 和 AiPlayer 对于多态性。
我希望它将实例化其中一个子类并添加到playerList
中但我不知道使用Reflection实现这一目标的最佳方式是什么。它总是会发生类型错误。
ExchangeSort<int>* sortArray = new ExchangeSort<int>;
}
有没有办法在不使用Class&lt;?&gt;
的情况下到达答案 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);
}