Headfirst 设计模式里面的 命令模式 中的有关数组赋值代码

看不懂这段数组的赋值代码。

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,就会报错,显然“() -> { }”并不代表赋空值。


慕容森
浏览 1264回答 2
2回答

炎炎设计

() -> {}&nbsp;是一个&nbsp;Java 8&nbsp;的新特性:lambda&nbsp;表达式。命令模式在&nbsp;Java 8&nbsp;以前的实现是类似这样的:pulic&nbsp;interface&nbsp;Command&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;doCommand(); }这种单方法的接口,在&nbsp;Java 8&nbsp;里允许使用简洁的&nbsp;lambda&nbsp;表达式来描述,如果这个方法有参数,比如:public&nbsp;interface&nbsp;Command&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;doCommand(int&nbsp;arg1,&nbsp;int&nbsp;arg2); }那么,就可以用&nbsp;(arg1, arg2) -> { System.out.println(arg1 + arg2); }&nbsp;来描述一个接口的实现。这是 函数式编程 的一种体现,你可以多了解一下&nbsp;Java 8&nbsp;这方面的新特性。所以回过头来说,() -> {}&nbsp;表示的是,实现了某个接口的空参、啥都不干的接口实例。具体实现的是哪个接口取决于&nbsp;onCommands&nbsp;的类型声明。so,你这个例子里意思就是:创建两个数组,分别是开启时要执行的命令、关闭时要执行的命令,数组长度为7;为了初始化,避免空指针,为这两个数组赋值&nbsp;啥都不干&nbsp;的&nbsp;接口实例&nbsp;是最合适的。
打开App,查看更多内容
随时随地看视频慕课网APP