目录
上代码无参无返回值:一个参数无返回值多个参数无返回值有参数有返回值总结之前已经讲解过Lambda表达式最基础的格式,这里我直接就不再讲解了
上代码
/*** @Author Lambda基础测试演练* @Date /8/10 19:01* @Version 1.0*/public class Test3 {//定义一个接口interface Te{void aa();}//使用匿名内部类和Lambda表达式重写接口public static void main(String[] args) {//#1匿名内部类Te te = new Te() {@Overridepublic void aa() {System.out.println("我是匿名内部类中的aa方法");}};Te te1 = ()->{System.out.println("我是lambda表达式中的aa方法 ");};te1.aa();}}
从上面我们可以看到,我们的Lambda表达式的最基础的格式,就是接口中的方法没有返回值也没有参,那么下就了解一下有返回值,有参的情况下,分别怎么写:
无参无返回值:
上一个代码中,虽然写的也是无参无返回值,但不是最简洁的写法:
如果在Lambda表达式的{ }中只有一条语句,比如上面的只有System.out.println("我是lambda表达式中的aa方法 ");
那么这个时候,我们就可以直接把{ }给省略掉,比如:
但这里只适用于只有一条语句,如果多出一条,这样写 就不行了
除此,还有两点,第一就是上面的多条语句不能省略{ }
2是Lambda表达式只能引用外部的final的局部变量,它本身的局部变量不能被final修饰,但同时这个 变量也不能被后面的代码修改,具有潜性的final修饰
一个参数无返回值
这里的话你们只要重心记住最简洁的两个方法就可以了,但是你们必须要知道什么可以省略,什么不可以省略!
多个参数无返回值
这里要注意,如果接口内方法有多个参数 ,那么Lambda表达式就不能把()省略,其他的基本于于一个参数的 一致;
有参数有返回值
interface Te{int aa(int a);}public static void main(String[] args) {Te te1 = (int a)->{return a+10;};int sum=te1.aa(10);System.out.println(sum);//类型可以省略Te te2 = (a)->{return a+10;};int sum2=te2.aa(10);System.out.println(sum2);//括号可以省略Te te3 = a->{return a+10;};int sum3=te3.aa(10);System.out.println(sum3);//只有一条return语句,{}和return可以均省去Te te5 = a->a+10;int sum5=te5.aa(10);System.out.println(sum5);//如果有多条语句,把后面的{ }加上就可以了Te te4 = (a)->{System.out.println("我是te4的aa方法 ");System.out.println("我是te4的aa方法 ");System.out.println("我是te4的aa方法 ");return a+10;};int sum4=te4.aa(10);System.out.println(sum4);}}
这里要注意:只有一条return语句,{}和return可以均省去
总结
虽然使用 Lambda 表达式可以对某些接口进行简单的实现,但并不是所有的接口都可以使用 Lambda 表达式来实现;
Lambda 规定接口中只能有一个需要被实现的抽象方法,不是规定接口中只能有一个方法,称为函数式接口