Lambda表达式

发布时间 2023-09-12 22:58:12作者: 程序侠

Lambda表达式

要使用lambda表达式就要要使用java 8,使用Lambda表达式可以让我们的代码更少,看上去更简洁;它是为了简化了函数式接口匿名内部类的语法。

Lambda只能接受函数式接口,所谓的函数式接口指的是只能有一个抽象方法的接口。

Lambda表达式语法

Lambda表达式通过操作符->分为两个部分:

  • 左侧:指定了Lambda表达式所需要的所有参数。

  • 右侧:指定了Lambda体,即Lambda表达式所要执行的功能。

    () ->{System.out.println("你好,啊辉吖!")}
    

    image-20230912224323705

public class LambdaExample {
    public static void main(String[] args) {
        //普通写法(匿名内部类)
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Ordinary Writing");
            }
        });
        thread.start();

        //Lambda写法。无参无返回void
        Thread thread1 = new Thread(() -> System.out.println("Lambda Writing"));
        thread1.start();
    }
}

******************【运行结果】******************
Ordinary Writing
Lambda Writing

什么是函数式接口

允许有一个抽象方法的接口,那么它就是一个函数式接口。针对函数式接口,官方给我们提供了一个注解@FunctionalInterface,该注解会检查它是否是一个函数式接口,所以如果我们需要自定义一个函数式接口的话,可以在接口类的上方声明@FunctionalInterface。

需要注意的是,数式接口虽然规定只能有一个抽象方法,但是同时可以有多个非抽象方法(如静态方法,默认方法,私有方法)。下面是一个自定义的函数式接口:

@FunctionalInterface
public interface FunctionalInterface {
    /**
     * 抽象方法(只能有一个)
     */
    void method();
    //void method1();再定义一个会提示:找到多个抽象方法

    /**
     * 默认方法,必须用default修饰
     */
    default void defaultMethod() {
        System.out.println("默认方法...");
    }

    /**
     * 静态方法方法
     */
    static void staticMethod() {
        System.out.println("静态方法...");
    }
}

需要注意的是,使用Lamdba表达式虽然能简化开发,但如果写的不好,运行调试和后期维护就会比较麻烦。