Java中的函数式编程语法

Java中的函数式编程语法,java,functional-programming,runnable,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

我正在阅读有关函数式编程及其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();
    }
看完代码后,我可以理解括号没有正确匹配,语法与面向对象的Java语法不相似

此代码未编译,在所有行上都出现以下错误:

Hello.java:19: error: class, interface, or enum expected
Runnable r2 = ()->(System.out.println(toString());};
我错过了什么?如果这个程序是正确的,它应该打印什么? 我正在Ubuntu 14.04.3上使用JavaC1.8.066


谢谢。

您的代码有语法错误。应该是:

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
类的
toString
方法返回的,并且
在lambda表达式中引用声明lambda表达式的实例。

您的代码有语法错误。应该是:

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
类的
toString
方法返回的,并且
在lambda表达式中引用声明lambda表达式的实例。

感谢您,Eran的响应。这非常有帮助。谢谢你,埃兰的回复。这很有帮助。