为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容森 2018-08-04 10:17:33
看不懂这段数组的赋值代码。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;
为了初始化,避免空指针,为这两个数组赋值 啥都不干 的 接口实例 是最合适的。


查看完整回答
反对 回复 2018-08-06
  • 2 回答
  • 0 关注
  • 1263 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信