本篇文章为大家展示了λ表达式与函数式接口怎么在Java中使用,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
λ表达式的类型,也称为“目标类型”,λ表达式的目标类型必须是函数式接口。函数式接口代表只包含一个抽象方法的接口。函数式接口可以包含多个默认方法,类方法,但只能声明一个抽象方法。
如果采用匿名内部类语法来创建函数式接口的实例,只要实现一个抽象方法即可,在这种情况下即可采用λ表达式来创建对象,该表达式创建出来的对象的目标类型就是这个函数式接口。
Java 8专门为函数式接口提供了@FunctionalInterface注解,该注解通常放在接口定义前面,该注解对程序功能没有作用,它用于告诉编译器执行更严格的检查——检查该接口必须是函数式接口,否则就会报错。
λ表达式有如下两个限制:
- <李>
λ表达式的目标类型必须是明确的函数式接口。
李> <李>λ表达式只能为函数式接口创建对象.Lambda表达式只能实现一个方法,因此它只能为只有一个抽象方法的接口(函数式接口)创建对象。
李>为了保证λ表达式的目标类型是一个明确的函数式接口,可以有如下三种常见方式:
- <李>
将λ表达式赋值给函数式接口类型的变量。
李> <李>将λ表达式作为函数式接口类型的参数传给某个方法。
李> <李>使用函数式接口对λ表达式进行强制类型转换。
李><强>二实战强>
1代码
@FunctionalInterface interface FkTest { void 才能运行(); } public class  LambdaTest { public 才能;static  void main (String [], args) {才能 ,,//,可接口中只包含一个无参数的方法 ,,//,λ表达式代表的匿名方法实现了Runnable接口中唯一的,无参数的方法 ,,//,因此下面的λ表达式创建了一个可运行的对象 ,,Runnable r =, (),→, { ,,,,,(int 小姐:=,0,,,小姐:& lt,, 2,,,小姐:+ +) ,,,,{ ,,,,,System.out.println(“λ表达式的目标类型必须是明确的函数式接口“); ,,,,} ,,}; ,,r.run ();//,//,,下面代码报错:,不兼容的类型:不,对象是函数接口//,,Object obj =, (),→, {//,,,,,(int 小姐:=,0,,,小姐:& lt;, 100,,,小姐:+ +)//,,,,{//,,,,,System.out.println ();//,,,,}//,,}; ,,Object obj1 =,(可)(),→,{ ,,,,,(int 小姐:=,0,,,小姐:& lt,, 2,,,小姐:+ +) ,,,,{ ,,,,,System.out.println(“对λ表达式执行了强制类型转换,这样就可以确定该表达式的目标类型为Runnable函数式接口“); ,,,,} ,,}; ,,((Runnable)其中obj1) .run ();//,,,同样的λ表达式可以被当成不同的目标类型,唯一的要求的是: ,,//,λ表达式的形参列表与函数式接口中唯一的抽象方法的形参列表相同 ,,Object obj2 =, (FkTest) (),→, { ,,,,,(int 小姐:=,0,,,小姐:& lt,, 2,,,小姐:+ +) ,,,,{ ,,,,,System.out.println(“λ表达式的形参列表与函数式接口中唯一的抽象方法的形参列表相同“); ,,,,} ,,}; ,,((FkTest) methoda) .run (); ,,} }
2运行
λ表达式的目标类型必须是明确的函数式接口
引用>
λ表达式的目标类型必须是明确的函数式接口
对λ表达式执行了强制类型转换,这样就可以确定该表达式的目标类型为Runnable函数式接口
对λ表达式执行了强制类型转换,这样就可以确定该表达式的目标类型为Runnable函数式接口
λ表达式的形参列表与函数式接口中唯一的抽象方法的形参列表相同
λ表达式的形参列表与函数式接口中唯一的抽象方法的形参列表相同λ表达式与函数式接口怎么在Java中使用