JAVA笔记#01 Lambda表达式

2020-03-17  本文已影响0人  areece

lambda表达式是什么

Lamba是一种实现@FunctionInterface的机制,@FunctionInterface是只带有一个虚方法的接口。可以把lambda表达式看成一个函数,这个函数就是对@FunctionInterface中虚方法的实现。

lambda表达式可以是() -> {} 这样的,也可以是x->{}这样的,甚至可以直接是引用的一个函数,比如system.out::println这样的。

直接使用函数

直接使用函数有各种各样的变种,包括

总之,不管什么样的函数,只要是能够转换成对@FunctionInterface中虚方法的实现就行。

变量引用域

Lambda表达式变量有两个特点:

  1. 词法范围是外层函数,与嵌套代码有相同的作用域,拟不能与外面的嵌套代码中的变量重名;并且,如果在lambda表达式中使用this事实上是嵌套代码中的this对象。
  2. 由于匿名类对于自由变量的捕获,所以对于外部局部变量(包括函数的参数),要做到事实上的final。不能直接改变变量(给变量赋值),而只是能够调用它的方法。

默认方法

默认方法与lambda表达式并不是一个东西,这是java为了能够向前兼容,给接口添加新方法与默认实现的做法。

默认方法会导致出现冲突,解决冲突的原则非常简单:

  1. 父类优先
  2. 如果是父接口出现冲突,需要手动解决冲突

接口静态方法

既然已经有了默认方法,那么支持接口的静态方法也就一点都不奇怪了。

上一篇下一篇

猜你喜欢

热点阅读