【学习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表达式铺路

