1.什么是函数式接口,函数式接口和什么有关,和什么无关?
函数式接口:必须是接口且只有一个抽象方法
和抽象方法有关,有且只能有一个抽象方法
和其他方法无关
2.什么情况下可以使用lambda表达式来替换面向对象编码?
使用Lambda必须要有接口,并且要求接口中有且仅有一个抽象方法
必须有上下文环境,才能推导出Lambda对应的接口
3.什么情况下lambda表达式可以简写?
形参的类型可以省略
若形参只有一个的话,可以省略"()"
若代码块只有一行的话,可以省略"{}"和";"
若这行代码有return的话,我们将"{}"和";"省略的时候,也必须将return省略掉
4.方法引用分为哪几种形式?
- 引用类的方法(静态方法)
- lambda写法 s -> Integer.parseInt(s)
- 类名::静态方法名
- 例如 : Integer::parseInt
- 注意:使用引用类的方法去替代lambda表达式的时候,将lambda中的全部形参传递给静态方法
- 引用对象的方法(普通方法)
- lambda写法 s -> System.out.println(s)
- 对象::方法名称
- 例如 : System.out::println
- 注意:使用引用对象的方法去替代lambda表达式的时候,将lambda中的全部形参传递给我普通方法
- 引用类的实例方法(成员方法)
- lambda写法 (s,x,y) -> s.subString(x,y)
- 类名::方法名
- 例如 : String::subString
- 注意:使用类的实例方法去替代lambda表达式的时候,将lambda中的第一个参数作为成员方法的调用者,其他参数作为方法的参数
- 引用构造器
- lambda写法 (name,age) -> new Student(name,age)
- 类名::new
- 例如 : Student::new
- 注意:使用引用构造器去替代lambda表达式的时候,将lambda中的所有参数作为构造器的参数.
|