Java8 的 lambda 表达式,与其他语言的匿名函数一样,是一段可以被传递的代码,因此可以被执行一次或多次。
可能很多人一看见带 -> 这样的箭头函数就发蒙,其实,只要知道两个字,就可以基本理解lambda表达式了,这两个字就是——推断。
每个lambda表达式都对应一个函数式接口,函数式接口是只包含一个抽象方法的接口,而lambda表达式,就是这个抽象接口的具体实现,所以通过这两个对应关系,jvm在解析lambda表达式时,就可以推断出很多东西,比如接口类型、方法的参数类型,以及方法的返回值类型等。
通过这些推断,使lambda表达式看起来神秘而简洁。而一旦了解推断的方式,对于lambda表达式的方法引用,如: System.out::println ,和构建器引用,如:
List<String> labels=.........;
Stream<Button> stram = label.stram().map( Button::new );
理解起来都很容易了
下面通过几幅原创的漫画,说明一下推断的过程
当然,使用lambda表达式还有一些需要特别注意的问题,最重要的需要遵守的约束就是,在lambda中,被引用的变量,即闭包之外的变量,不可被更改。
如下代码即违背了这一约束:
public static void repeatMessage(String text, int count) {
Runable r = () -> {
while (count > 0) {
count--; //错误,不能更改闭包引入变量的值
}
}
}
至于为什么有这样一个约束,主要式基于线程安全方面的考虑。
敬请关注---盲点技术号,我们将持续努力与您一起学习探讨开发技术
共同学习,写下你的评论
评论加载中...
作者其他优质文章