我有一个代表游戏动作的课程。该类的每个实例都应该在输入中包含一个Game对象(包含游戏的状态)并执行一个动作。例如,如果两个玩家进行交易,则该动作应该从玩家获取金钱并将其交给另一个玩家,然后交换该项目。由于人们可以在游戏中执行太多可能的操作,因此拥有一个实现各种操作的泛型类会更好,这些操作存储执行此类操作的lambda函数。例如:
public class GameAction
{
<lambda-function> action;
public void doAction(Game game) {
action(game); // e.g.: exchange money and items between two players
}
}
有没有办法在Java 8中做类似的事情?
答案 0 :(得分:1)
是的,您可以拥有Consumer<Game>
。这是一个功能接口,其目标是将Game
作为参数并且不返回结果:它有效消耗参数。
public class GameAction
{
private Consumer<Game> action;
public void doAction(Game game) {
action.accept(game); // e.g.: exchange money and items between two players
}
}
答案 1 :(得分:0)
您的GameAction
基本上是Consumer<Game>
。所以你可以这样写:
Consumer<Game> exchangeAction = MyClass::exchangeAction;
private static void exchangeAction(Game game) {
double amount = game.getAmount();
game.getBuyer().spend(amount);
game.getSeller().receive(amount);
}
根据更多背景信息,该示例可以根据您的需要进行调整。