有没有办法将lambda函数存储到变量中

时间:2015-12-07 17:27:03

标签: java lambda

我有一个代表游戏动作的课程。该类的每个实例都应该在输入中包含一个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中做类似的事情?

2 个答案:

答案 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);
}

根据更多背景信息,该示例可以根据您的需要进行调整。