什么是闭包,Java中有闭包吗?

一、介绍

闭包是什么?我学习Java以来,虽然听过这个名词,但我今天才第一次了解它。

所谓闭包,就是在函数中有另一个函数,这个内部函数可以作为参数,外部通过传递的方式,将函数传递进来。从而内部函数可以访问到外部函数的局部变脸。

二、演示

我们使用groovy来演示闭包的使用,它是一门由java优化而来的语言,底层正是class,可以运行再JVM虚拟机上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def sth(Closure closure) {
def x = 5
def y = 5
println(closure.call(x, y))
}

// 加
sth({x, y -> x + y})
// 减
sth({x, y -> x - y})
// 乘
sth({x, y -> x * y})
// 除
sth({x, y -> x / y})

运行结果如下

image-20230313180656370

Java中,我们可以使用匿名内部类来完成类似的功能,而在Java8后,可以直接使用lambda表达式,使得编码速度大大提升,语法结构也变得大同小异了起来

使用如下,是不是差不多

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.banmoon.test.closure;

import java.util.function.BiFunction;

public class Main {

public static void main(String[] args) {
sth((x, y) -> x + y);
sth((x, y) -> x - y);
sth((x, y) -> x * y);
sth((x, y) -> x / y);
}

public static void sth(BiFunction<Integer, Integer, Object> function) {
int x = 5;
int y = 5;
System.out.println(function.apply(x, y));
}

}

image-20230313203654844

关于函数式编程,可以看我的这篇文章,Java的函数式接口以及Lambda表达式

三、最后

我是半月,你我一同共勉!