参考教材 魔乐科技网课: http://www.mldn.cn/course/40/task/512/show
一、Lamda表达式的作用
Lamda 是一种基于函数的编程方式。java是面向对象的编程语言,也就是说一切操作都基于类,所有功能都定义在类中。很多习惯于函数编程的开发者就觉得不好用,为了吸引更多开发者,java1.8终于推出了Lamda表达式。
但并不是有了Lamda表达式java才开始的函数编程。最早是通过匿名内部类实现的(以接口为主)。
回顾匿名内部类
interface Message { public void print(String str) ; } public class Main { public static void main(String[] args) { Message msg = new Message() { @Override public void print(String str) { System.out.println(str); } }; msg.print("hello"); } }
输出结果
hello
由以上代码可见,目的是为了输出一条语句,却由于java类结构的强制限制,所以显得代码过于复杂。
利用Lamda表达式实现
interface Message { public void print(String str) ; } public class Main { public static void main(String[] args) { Message msg = (s) -> System.out.println(s); msg.print("hello"); } }
首先不看语法,至少通过Lamda表达式,这个语句少了,没有了java类结构的过分限制。
二、基础语法
上面程序的 Message msg = (s) -> System.out.println(s); 就是一条Lamda表达式
其形式为:
(参数,名称可以随意起)-> 方法体(多行要加{ }括住,只有return语句时要省略return)
Lamda表达式的组成要求如下:
(参数):与Message接口定义的print()方法的参数类型一致,但是此处不需要进行声明。
-> :是一个固定语法,表示将参数指向方法体。
方法体 :就是最早进行匿名内部类实现方法的时候所编写的方法体代码。
在使用Lamda方法的时候有一个最为重要的定义要求:接口里面的方法只能有一个。
1、Lamda 表达式最重要的目的是解决匿名内部类的问题
2、如果要想使用Lamda表达式,必须以接口为基础,而且接口只能有一个抽像方法
三、函数接口的定义
一直在强调,如果要实现Lamda表达式,那么必须有一个前提,这个前提就是接口里面定义的抽想方法只能存在一个,所以为了严格这样的语法要求。可以使用函数式接口定义。
定义函数接口:
@FunctionalInterface interface Message { public void print(String str) ; }
这样就能限制接口中的抽象方法只有一个,多会报错