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