美文网首页
JAVA笔记#01 Lambda表达式

JAVA笔记#01 Lambda表达式

作者: areece | 来源:发表于2020-03-17 08:35 被阅读0次

    lambda表达式是什么

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

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

    直接使用函数

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

    • 类::静态方法
    • 类::实例方法
    • 对象::实例方法
    • 构造函数,这个比较特殊,实际上是类型::New(),而类型可能是某个类,也可以是类的数组。

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

    变量引用域

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

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

    默认方法

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

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

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

    接口静态方法

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

    相关文章

      网友评论

          本文标题:JAVA笔记#01 Lambda表达式

          本文链接:https://www.haomeiwen.com/subject/dulzehtx.html