1.什么是函数式接口,函数式接口和什么有关,和什么无关?
有且仅有一个抽象类方法的接口,和抽象方法数量有关,和默认方法,静态方法无关
2.什么情况下可以使用lambda表达式来替换面向对象编码?
- 使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法(函数式接口)
- 必须有上下文环境,才能推导出Lambda对应的接口
- 根据局部变量的赋值得知Lambda对应的接口
? Runnable r = () -> System.out.println("Lambda表达式");
- 根据调用方法的参数得知Lambda对应的接口
? new Thread(() -> System.out.println("Lambda表达式")).start();
3.什么情况下lambda表达式可以简写?
- 参数类型可以省略。但是有多个参数的情况下,不能只省略一个
- 如果参数有且仅有一个,那么小括号可以省略
- 如果代码块的语句只有一条,可以省略大括号和分号,和return关键字
4.方法引用分为哪几种形式?
引用类的静态方法 类名::静态方法
使用说明
Lambda表达式被类方法替代的时候,它的形式参数全部传递给静态方法作为参数
引用对象的成员方法 对象::成员方法
使用说明
Lambda表达式被对象的实例方法替代的时候,它的形式参数全部传递给该方法作为参数
引用类的成员方法 类名::成员方法
使用说明
Lambda表达式被类的实例方法替代的时候
第一个参数作为调用者
后面的参数全部传递给该方法作为参数
引用构造方法 类名::new
使用说明
Lambda表达式被构造器替代的时候,它的形式参数全部传递给构造器作为参数 |