为什么 lambda 表达式是 Java 中的对象?

sol*_*eit 2 java lambda

Java 中的 lambda 表达式对象如何?作为函数式编程一部分的lambda表达式如何在Java这种面向对象的语言中实现呢?要理解 lambda 表达式,我需要哪些 Java 概念?

Jak*_*ček 5

您需要了解几件事:

1)功能接口

  • 只有一个公共方法的接口
public interface Runnable{
    void run();
}
Run Code Online (Sandbox Code Playgroud)
  • 这是函数式接口的示例,它可以有不同类型的方法,例如 intprocessNumber(int number)
  • 只需记住只能有一种方法(一种未实现的方法,默认值不算)

2)使用函数式接口

  • 你可以在你的类中实现你的功能接口,比如说 MyRunnable
public class MyRunnable implements Runnable{
    public void run(){
        System.out.println("Hello world");
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 比您可以在另一个方法中传递 MyRunnable 类它只是普通对象
public class MyClass{
    public void myMethod(Runnable runnable){
        runnable.run();
    }
}
Run Code Online (Sandbox Code Playgroud)
  • 这将打印“Hello world”
public static void main{
    MyClass myClass = new MyClass();
    myClass.myMethod(new MyRunnable());
}
Run Code Online (Sandbox Code Playgroud)

3)lambda在做什么

  • 所以 lambda 让你做的是创建接口的匿名实现
public static void main{
    MyClass myClass = new MyClass();
    myClass.myMethod(() -> System.out.println("Hello my world"));
}
Run Code Online (Sandbox Code Playgroud)
  • 这将打印“Hello my world”
  • 您只是创建 Runnable 的匿名实现并将其传递给 MyMethod
  • 它只是语法糖
public static void main{
    MyClass myClass = new MyClass();
    myClass.myMethod(new Runnable{
        public void run(){
            System.out.println("Hello my world");
        });
}
Run Code Online (Sandbox Code Playgroud)