Lambda 表达式
说明:
lambda中
()里没有内容,可以看作形参,如果有参数,可以用逗号隔开。 -> 指要做的事情 {} 指代码块,可以理解为我们要做的内容。
使用前提:
有一个接口
接口只有一个抽象方法
同理,我们可以高仿线程的创建进行练习;
首先创建一个接口
我们想要通过这个接口做一些事情的话,一般的写法如下:
创建一个实现类
main 进行调用
如此写法相对复杂
Lambda写法对比
如果接口有参数的话,在() 中用逗号隔开就好,另外传入的参数类型是可以省略的。
例如:
这是在两个参数的时候,如果只有一个参数的时候,括号都可以省略
省略写法
如果代码块也只有一条的情况下,大括号,分号也可以省略
如果有值需要return时需要注意
如果有return 时 并且只有一行代码块去掉分号、大括号的同时 ,return也要去掉
如下写法;
匿名内部类可以是接口,可以是抽象类,也可以是具体类
Lambda表达式只能是接口,而且接口只能有一个方法
如果在接口中有多个方法的话,只能使用匿名内部类的方式
例如:有抽象类,接口,和普通类
有如上内容,我们同时用匿名内部类的方式调用
如上,用匿名内部类的方式是可以通过编译的;
但是用Lambda表达式的方式无法通过编译
此次实验再次说明在使用Lambda表达式的前提是,在接口中, 有且只有一个方法的时候。
在使用匿名内部类的时候,会单独的生成一个.class字节码文件,Lambda表达式在运行的时候,会在运行的时候动态生成。
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iZ0gDNihDOihjZ4U2Y1gjZyImNxcTYlBjNwAjM4MTMk9CXwMzLchDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL2M3Lc9CX6MHc0RHaiojIsJye.png)
有参总结:
参数类型可以省略不写,但是多个参数时,要么不省略,要么同时省略;
如果参数只有一个,小括号可以省略
如果代码块只有一条,大括号和分号可以省略,如果有return 也要省略。
再次强调:
使用Lambda 必须要有接口,接口中只能有一个抽象方法
Lambda 使用时必须要有上下文环境,才能到处Lambda对应的接口; #1
1.上面第二句话可能不好理解。在此解释