您的位置:首页 > 编程语言 > Java开发

Java lambda表达式

2019-08-01 15:21 267 查看
原文链接:https://www.geek-share.com/detail/2727867441.html

lambda表达式是一个可以传递的代码块,可以在以后执行一次或多次。

表达形式:(param)->{do something;},

如果没有param,需要保留“()”;

如果可以推到一个lambda表达式的参数类型,则可以忽略其他类型;

如果方法只有一个参数,而且这个参数的类型可以推导得出,那么甚至还可以省略小括号;

无需指定lambda表达式的返回类型,返回类型总是会由上下文推导得出。

 

对于只有一个抽象方法的接口,需要这种接口的对象时,就可以提供一个lambda表达式。这种接口被称为函数式接口(functional interface),

java.util.function包中定义了很多非常通用的函数式接口。

 

引用方法的时候,可以使用如下的语法:

object::instanceMethod;

Class::staticMethod;

Class::instanceMehtod.

前两种情况引用等价于提供方法参数的lambda表达式,例如下面两种方式。

Timer t1=new Timer(1000,event->System.out.print(event));
Timer t2=new Timer(1000,System.out::println));

第3种情况中,第1个参数会成为方法的目标。例如,String::compareToIgnoreCase等同于(x,y)->x.compareToIgnoreCase(y)。

也可以使用this。例如,this::equals等同于x->this.equals(x)。

子类调用父类方法的时候,可是使用super::instanceMethod。

 

表示lambda表达式的数据结构必须存储自由变量的值,只能引用值不会改变的变量,

即lambda表达式中捕获的变量必须实际上是最终变量(effectively final),这个变量初始化后就不会再为它赋新值,

因为对于多线程,如果引用的变量变化是很危险的。

 

lambda表达式的体与嵌套快有相同的作用域。这里同样适用于命名冲突和遮蔽的有关规则。

在一个lambda表达式中使用this关键字时,是指创建这个lambda表达式的方法的this参数。

 

转载于:https://www.cnblogs.com/lvjianwei/p/8351722.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: