看不懂这段数组的赋值代码。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 关注
- 1355 浏览
添加回答
举报
0/150
提交
取消
