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 和 this
的 toString
方法在 lambda 表达式内部指的是在其中声明 lambda 表达式的实例。
我正在阅读 函数式编程 及其在 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 和 this
的 toString
方法在 lambda 表达式内部指的是在其中声明 lambda 表达式的实例。