闭包是什么?我学习Java
以来,虽然听过这个名词,但我今天才第一次了解它。
所谓闭包,就是在函数中有另一个函数,这个内部函数可以作为参数,外部通过传递的方式,将函数传递进来。从而内部函数可以访问到外部函数的局部变脸。
我们使用groovy
来演示闭包的使用,它是一门由java
优化而来的语言,底层正是class
,可以运行再JVM
虚拟机上。
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})
运行结果如下
在Java
中,我们可以使用匿名内部类来完成类似的功能,而在Java8
后,可以直接使用lambda
表达式,使得编码速度大大提升,语法结构也变得大同小异了起来
使用如下,是不是差不多
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));
}
}
关于函数式编程,可以看我的这篇文章,Java的函数式接口以及Lambda表达式
我是半月,你我一同共勉!