λ表达式与函数式接口怎么在Java中使用

  介绍

本篇文章为大家展示了λ表达式与函数式接口怎么在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中使用