Java中的函数编程语法

时间:2015-12-08 07:24:35

标签: java functional-programming runnable

我正在阅读功能编程及其在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

谢谢。

1 个答案:

答案 0 :(得分:6)

您的代码存在语法错误。它应该是:

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方法返回的内容,而lambda表达式中的this是指其中的实例lambda表达式被声明。