首页 > 解决方案 > 使用 lambda 表达式创建匿名对象

问题描述

我正在尝试使用 lamdas 简化我的对象创建。

我有一个提供-方法的类public void addCmd(ScriptCommand cmd)

有了这个,我可以写一个这样的调用:

ScriptCommand cmd = new ScriptCommand() {
                    @Override
                    public void run(double deltaTime) {
                      // some logic here...
                    }
                };
addCmd(cmd);

我已经尝试过这样称呼:

ScriptCommand cmd = (deltaTime) -> {
                    // some logic here...
                };
addCmd(cmd);

但是,这被 IDE 识别为错误。在这种情况下如何使用 lambda?

编辑:

ScriptCommand看起来像这样:

public abstract class ScriptCommand {
    private boolean completed = false;

    public abstract void run(double deltaTime);

    protected void complete() {
        completed = true;
    }

    public boolean isCompleted() {
        return completed;
    }

}

标签: javalambda

解决方案


例子:

@FunctionalInterface // Optional
interface ScriptCommand {
  void run(double deltaTime);
}

public static void main(String[] args) {
  ScriptCommand command = (deltaTime) -> System.out.println(deltaTime);
  // execute code
  command.run(3);
  // if you want to call addCmd(ScriptCommand)
  addCmd(command);
  addCmd((deltaTime) -> System.out.println(deltaTime));
}

输出:3.0


推荐阅读