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