5.1Java语言的Lambda表达式

1.Lambda表达式声明

Lambda表达式 称为 匿名函数,即没有名称的方法,也可称为闭包(Closure),允许把函数作为一个方法的参数传递。

(参数列表) -> { Lambda表达式主体; }

-> 被称为箭头操作符或Lambda操作符,箭头操作符将 Lambda 表达式拆分成两部分:

  • 可选参数类型:Lambda表达式能够推导出参数的类型。
  • 可选参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选花括号和return如果主体包含了一个语句,则可省略花括号和return关键字。

2.访问成员变量

成员变量包括:静态成员变量和实例成员变量。

在Lambda表达式中可以访问这些成员变量,此时的Lambda表达式与普通方法一样,可以读取成员变量,也可以修改成员变量。

//LambdaDemo.java文件
package com.a51work6;

public class LambdaDemo {
    // 实例成员变量
    private int value = 10;  
    // 静态成员变量
    private static int staticValue = 5;
    // 静态方法,进行加法运算
    public static Calculable add() {
        Calculable result = (int a, int b) -> {
        // 访问静态成员变量,不能访问实例成员变量
            staticValue++;
            int c = a + b + staticValue; // this.value;
            return c;
        };
        return result;
    }

    // 实例方法,进行减法运算
    public Calculable sub() { 
        Calculable result = (int a, int b) -> {
            // 访问静态成员变量和实例成员变量
            staticValue++;
            this.value++;
            int c = a - b - staticValue - this.value;
            return c;
        };
        return result;
    }
}

3.捕获局部变量

对于成员变量的访问Lambda表达式与普通方法没有区别,但是对于访问外层局部变量时,会发生“捕获变量”情况。Lambda表达式中捕获变量时,会将变量当成final的,在Lambda表达式中不能修改那些捕获的变量。

//LambdaDemo.java文件
package com.a51work6;

public class LambdaDemo {
    // 实例成员变量
    private int value = 10;
    // 静态成员变量
    private static int staticValue = 5;
    // 静态方法,进行加法运算
    public static Calculable add() {
        //局部变量
        int localValue = 20;
        Calculable result = (int a, int b) -> {
        // localValue++; //编译错误
        int c = a + b + localValue;
        return c;
        };
    return result;
    }

    // 实例方法,进行减法运算
    public Calculable sub() {
        //final局部变量
        final int localValue = 20;
        Calculable result = (int a, int b) -> {
            int c = a - b - staticValue - this.value;
            // localValue = c; //编译错误
            return c;
        };
        return result;
    }
}

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/back/java/2510.html

发表评论

登录后才能评论