我只是尝试了很少的java-8函数式编程,我对lamda表达式的行为几乎没有怀疑。我试图用简单的命令模式来解释下面的问题。Java-8 lambda表达式与函数接口的行为
public interface Editor {
public void open();
public void close();
// public void save();
}
编辑器实现
public class MyEditor implements Editor {
@Override
public void open() {
System.out.println("...opening");
}
@Override
public void close() {
System.out.println("...closing");
}
}
接口行动
// this is actually a @FunctionalInterface
public interface Action {
public void perform();
}
可操作的项目。
public class Open implements Action {
private final Editor editor;
public Open(Editor editor) {
this.editor = editor;
}
@Override
public void perform() {
editor.open();
}
// Similarly Close implements Action...
...
宏来运行所有的动作。
public class Macro {
private final List<Action> actions;
public Macro() {
actions = new ArrayList<>();
}
public void record(Action action) {
actions.add(action);
}
public void run() {
actions.forEach(Action::perform);
}
}
现在运行宏是interesing部分的地方。
public class RunMacro {
public static void main(String[] args) {
Editor editor= new MyEditor();
Macro macro = new Macro();
macro.record(() -> editor.open());// Line 4
macro.record(new Close(editor)); // Line 5
macro.run();
}
}
我的问题是,4号线的运行,如何Java的理解,创造一个instanceof
打开,并将其添加到宏中。简而言之,lamdba表达式的行为与第5行的行为相同。整个模式通过lambda表达式变得更简单但是使用OOPS进行函数式编程是否使开发处于非常抽象的级别或不太冗长?
礼貌的问题:O'Reilly Media公司:Java的8个Lamdbas
可以在任何一个请澄清这一点?
是啊!这是我正在寻找的,谢谢(: – chaosguru 2014-09-24 08:07:30
谢谢(:这是更多的声明方式 – chaosguru 2014-09-24 08:17:21
)对,我真的很喜欢方法引用和java 8引入了很多伟大的东西,没有失去它的简单性更大的java版本 – gontard 2014-09-24 08:20:10