如何使用lambda表达式将方法作为参数传递

时间:2015-02-04 16:34:39

标签: lambda

我正在为一个大学项目开发​​一个简单的2D游戏引擎,我们正在试图弄清楚我们如何为应用程序员提供一个方法,他可以在其中发送一个密钥代码,成员和成员方法,以便他们将特定键绑定到特定方法。

我们有一个Game类,其中包含了此时相关的大部分内容,当我们在C ++中执行类似的项目时,我们能够在Game类中创建一个方法{{1和keycode作为参数(并且std函数包含成员和成员函数)然后只将它们存储在地图中,每当按下正确的键时,我们只调用std::function执行正确的方法正确的对象。

我们一直在搜索java中类似的解决方案,我们唯一能找到的就是使用lambda表达式,但我们还没有设法找到任何对我们的示例有帮助的体面指南。问题基本上是我们如何将特定键绑定到特定成员和函数,如果结构如下所示:

Game.java类包含一个玩家对象,我们希望能够在Main类中调用一个像这样工作的函数

std::function

然后游戏类将这些绑定存储在某种结构中,在这种结构中可以迭代,当按下向上时,将在播放器中调用 game.bindKey(KeyEvent.VK_UP, player,jump()) 方法。

我们如何在Java中执行此操作,是否可以更轻松地将键绑定到方法而不使用lambdas?

1 个答案:

答案 0 :(得分:0)

从您所说的看来,访客模式似乎是查看问题的有用方式,http://www.tutorialspoint.com/design_pattern/visitor_pattern.htm

具体来说,我首先接受一个接口,它有一个"动作"方法来完成你想要的东西,类似于这样的东西:

public interface GameKeyBoardAction {
    public void executeAction(Context cx)
}

public class JumpAction implements GameKeyBoardAction {
    public void executeAction(Context cx) {
        // ... do what's needed for the jump action
    }
}

然后你可以在某处调用它:

game.bindKey(KeyEvent.VK_UP, player, new JumpAction())

我还建议使用Map实现来查找操作,可以是简单的HashMap,也可以来自java.util.concurrent.或类似的库