java - 使用 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;
}
}
解决方案
例子:
@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
推荐阅读
- ruby-on-rails - 如何在 Ruby on Rails 中将文本方法添加到日期集合选择?
- javascript - ExtJS - 如何使用 PWA 构建开发应用程序?
- javascript - 如何使用 jQuery UI 对话框更新元素的内容?
- jestjs - 如何在 Jest 中测试直系子女数?
- r - 如何在 R 中包含使用聚合()聚合的行数
- javascript - 在 $.ajax 之后为全局变量赋值并表现得像一个 const
- python - 是否有一种算法可以使用不同的数据约束进行平均?
- reactjs - 如何在 SPA 应用程序中发送/订阅通知以检查持久功能的状态?
- grafana - 如何使用 SpringBoot 2、InfluxDB 和 Grafana 理解微米指标?
- android - 在 Gridlayout 内的 MaterialCardView 中找不到属性 layout_columnWeight