Java 中的函数式编程语法

Functional programming syntax in Java

我正在阅读 函数式编程 及其在 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 两次,因为这就是 Hello class returns 和 thistoString 方法在 lambda 表达式内部指的是在其中声明 lambda 表达式的实例。