【学习Day20】什么是函数式接口?有什么使用场景?

一、lambda表达式

1.1、简介

lambda表达式用一种非常简洁的语法来实现代码

1.2、适用于场景

方法的参数必须是一个接口类型,并且接口中只能有一个抽象方法

1.2、组成部分

()-> {} //lambdaa表达式格式
    () 表示参数列表 -> 分隔 {} 执行的代码

1.3、使用示例

正常编写

public static void main(String[] args) {
          
   
       new Thread(new Runnable() {
          
   
           @Override
           public void run() {
          
   
               System.out.println("正常编写得到线程");
           }
       });
    }
}

lambda表达式编写

public class Test {
          
   
    public static void main(String[] args) {
          
   
       new Thread(() -> System.out.println("lambda编写得到线程"));
    }
}

1.4、lambda写法简化

    当参数只要一个的时候可以省略() 当语句只有一条的时候可以省略{}、return、; 在参数中无需定义类型,只需要定义变量 当参数只有一个的时候,并且语句只有一条
public interface OneArgs {
          
   
    void oneArgs(Integer num);
}

public class Test {
          
   

    public static void main(String[] args) {
          
   
      one(num -> System.out.println(num));
    }

    public static void  one(OneArgs one){
          
   
        one.oneArgs(12);
    }

}

1.5、lambda和匿名内部类的区别

    方法数:lambda中只有一个抽象方法,匿名内部类中可以随意定义 所需类型不同:lambda中只需要一个接口类型,匿名内部类可以是类、抽象类、接口

总结:

lambda表达式替代匿名内部类,使其代码简化

二、函数式接口

2.1、介绍

接口中只有一个抽象方法,称为函数式接口,大部分时候通过@FunctionalInterface注解修饰,此注解可以在编译的时候检测,如果有多个抽象方法,编译不通过

2.2、使用

定义一个函数式接口

@FunctionalInterface
public interface OneArgs {
    void oneArgs(Integer num);
}

总结:

为lambdab表达式铺路
经验分享 程序员 微信小程序 职场和发展