看不懂这段数组的赋值代码。
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,就会报错,显然“() -> { }”并不代表赋空值。
() -> {}
是一个Java 8
的新特性:lambda
表达式。命令模式在
Java 8
以前的实现是类似这样的:这种单方法的接口,在
Java 8
里允许使用简洁的lambda
表达式来描述,如果这个方法有参数,比如:那么,就可以用
(arg1, arg2) -> { System.out.println(arg1 + arg2); }
来描述一个接口的实现。这是 函数式编程 的一种体现,你可以多了解一下
Java 8
这方面的新特性。所以回过头来说,
() -> {}
表示的是,实现了某个接口的空参、啥都不干的接口实例。具体实现的是哪个接口取决于
onCommands
的类型声明。so,你这个例子里意思就是:
创建两个数组,分别是开启时要执行的命令、关闭时要执行的命令,数组长度为7;
为了初始化,避免空指针,为这两个数组赋值 啥都不干 的 接口实例 是最合适的。