zoukankan      html  css  js  c++  java
  • Java lambda表达式

    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参数。

  • 相关阅读:
    MQTT
    群晖搭建webssh
    OSI 协议
    centos7 yum安装ffmpeg,以及ffmpeg的简单用法
    centos7 RTMP直播服务器搭建
    elasticsearch
    H5的storage
    bootstrap 列表組
    eclipse的debug模式下启动不了tomcat
    bootstrap collapse
  • 原文地址:https://www.cnblogs.com/lvjianwei/p/8351722.html
Copyright © 2011-2022 走看看