看不懂这段数组的赋值代码。public RemoteControl() {
onCommands = new Command[7];
offCommands = new Command[7];
for (int i = 0; i < 7; i++) {
onCommands[i] = () -> { };
offCommands[i] = () -> { };
}
}这是啥意思啊? onCommands[i] = () -> { };
offCommands[i] = () -> { };按这样子运行,结果是对的;但如果改成 等于null,就会报错,显然“() -> { }”并不代表赋空值。
2 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
() -> {}
是一个 Java 8
的新特性:lambda
表达式。
命令模式在 Java 8
以前的实现是类似这样的:
pulic interface Command { void doCommand(); }
这种单方法的接口,在 Java 8
里允许使用简洁的 lambda
表达式来描述,如果这个方法有参数,比如:
public interface Command { void doCommand(int arg1, int arg2); }
那么,就可以用 (arg1, arg2) -> { System.out.println(arg1 + arg2); }
来描述一个接口的实现。
这是 函数式编程 的一种体现,你可以多了解一下 Java 8
这方面的新特性。
所以回过头来说,() -> {}
表示的是,实现了某个接口的空参、啥都不干的接口实例。
具体实现的是哪个接口取决于 onCommands
的类型声明。
so,你这个例子里意思就是:
创建两个数组,分别是开启时要执行的命令、关闭时要执行的命令,数组长度为7;
为了初始化,避免空指针,为这两个数组赋值 啥都不干 的 接口实例 是最合适的。
- 2 回答
- 0 关注
- 1263 浏览
添加回答
举报
0/150
提交
取消