我正在阅读有关函数式编程及其在Java中的实现的内容.我遇到的这个例子与Java中的面向对象编程有一些不同的语法.功能编程是否有一些不同的语法?
public class Hello { Runnable r1 = ()->(System.out.println(this);}; Runnable r2 = ()->(System.out.println(toString());}; public String toString(){ return “Howdy!”;} public static void main(String args) { new Hello().r1.run(); new Hello().r2.run(); }
在完成代码之后,我可以理解括号不匹配,语法与OOP的Java语法不相似.
此代码无法编译并在所有行上给出以下错误:
Hello.java:19: error: class, interface, or enum expected Runnable r2 = ()->(System.out.println(toString());};
我错过了什么?如果这个程序是正确的,它会打印什么?我在Ubuntu 14.04.3上使用javac 1.8.0_66
谢谢.
您的代码有语法错误.它应该是 :
Runnable r1 = ()->{System.out.println(this);}; Runnable r2 = ()->{System.out.println(toString());};
那些是lambda表达式.这也有效:
Runnable r1 = ()->System.out.println(this); Runnable r2 = ()->System.out.println(toString());
这个程序会打印Howdy
两次,因为这就是toString
你的Hello
类的方法返回的内容,而this
lambda表达式中的内容是指声明lambda表达式的实例.