avatar

java8新特性 —— lambda表达式

Lambda表达式,也称为闭包,它是推动Java8发布的最重要新特性。它允许把函数作为一个方法的参数传递到方法中。使用Lambda表达式可以使代码更加简洁紧凑。lambda表达式主要用来定义行内执行的方法类型接口。

Lambda语法

lambda语法的格式如下:

1
2
3
(parameters) -> expression

(parameters) -> { statements; }

Lambda特征

lambda具有以下特征:

  • 可选类型声明: 不需要声明参数类型,编译器可以统一识别参数值。

    1
    2
    x -> x * 5
    () -> 5
  • 可选的参数圆括号: 一个参数时无需定义圆括号,但是多个参数时必须要有圆括号。

    1
    2
    x -> x * 5
    (x, y) -> x * y
  • 可选的大括号: 如果主体中包含了一个语句时不需要使用大括号。

    1
    2
    3
    4
    5
    x -> 3 * x
    x -> {
    int num = 5;
    return x * num;
    }
  • 可选的返回关键字: 如果主体中只有一个表达式返回值则编译器会自动返回值,大括号需要指明表达式返回了一个数值。

变量作用域

  • lambda表达式只能引用 定义了 final 的外层局部变量,也就不能在lambda内部修改外部定义的局部变量,否则会编译错误。
  • lambda表达式的局部变量可以不用声明为 final ,但是必须不可被后面的代码修改(隐形 final 定义)
  • 可以在lambda表达式中访问外层的局部变量。
  • lambda内部不允许声明与局部变量同名的参数或者局部变量。
文章作者: 惆怅客
文章链接: https://www.songhailong.com/articles/5a77136b/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 惆怅客

评论