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

如何使用lambda表达式将方法作为参数传递,lambda,Lambda,我现在正在为一个大学项目用Java开发一个简单的2d游戏引擎,我们遇到了一些主要问题,试图找出如何为应用程序程序员提供一个方法,他可以发送一个键代码、成员和成员方法,以便他们将一个特定的键绑定到一个特定的方法 我们有一个游戏类,包含了与此相关的大部分内容,当我们在C++中做了类似的项目时,我们能够在游戏类中创建一个方法,该方法将使用 STD::函数< /COD>和KEYCOND作为参数(并且STD函数包含成员和成员函数)然后将它们存储在地图中,只要按下正确的键,我们就调用std::functio

我现在正在为一个大学项目用Java开发一个简单的2d游戏引擎,我们遇到了一些主要问题,试图找出如何为应用程序程序员提供一个方法,他可以发送一个键代码、成员和成员方法,以便他们将一个特定的键绑定到一个特定的方法

我们有一个游戏类,包含了与此相关的大部分内容,当我们在C++中做了类似的项目时,我们能够在游戏类中创建一个方法,该方法将使用<代码> STD::函数< /COD>和KEYCOND作为参数(并且STD函数包含成员和成员函数)然后将它们存储在地图中,只要按下正确的键,我们就调用

std::function
,它在正确的对象上执行正确的方法

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

java类包含一个player对象,我们希望能够在主类中调用这样的函数

 game.bindKey(KeyEvent.VK_UP, player,jump())
然后,game类将这些绑定存储在某种结构中,在这种结构中可以对其进行迭代,当按下up键时,将在player中调用
jump()
方法


我们如何在Java中实现这一点?有没有更简单的方法可以将键绑定到方法而不使用lambdas?

从您所说的来看,访问者模式似乎是解决问题的有用方法

具体地说,我将从接受一个接口开始,该接口有一个“action”方法来做您想要做的事情,类似于:

公共界面游戏键盘操作{
public void executeAction(上下文cx)
}
公共类JumpAction实现GameKeyBoardAction{
public void executeAction(上下文cx){
//…做跳跃动作所需的动作
}
}
然后你可以在某个地方叫它:


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

中的内容,谢谢您的回复!在我们看到这个答案之前,我们设法使用Java8Lambdas解决了这个问题,但您的建议似乎是老办法,现在人们大多建议使用lambas来节省运行时间,因为它使代码更干净。我们只需要一个以整数为键的映射,然后以可运行的lambda为值,到目前为止效果非常好!Lambdas绝对有效:)您选择的只是设计偏好的问题。很高兴你找到了解决办法。
game.bindKey(KeyEvent.VK_UP, player, new JumpAction())