java中的高阶函数和闭包

bar*_*kur 1 java closures java-8

以下代码模仿高阶函数和闭包.

static Function<Integer, Integer> getDoubleFunc(int multi) {
    return (val) -> {
        return val * multi;
    };
}
Run Code Online (Sandbox Code Playgroud)

但为什么它不被认为是一个?是因为这里的函数是一个接口吗?

Bri*_*etz 6

关于Java lambda表达式是否是"真正的闭包"的整个"辩论"是一个相当低效的问题,因为大多数参与者都隐含地定义了"真正的闭包"对于他们最喜欢的其他语言所谓的闭包的含义,然后转身并说"语言Y没有'真正的'封闭."

Java lambda表达式在封闭的词法范围内关闭,但不在变量上.

维基百科说:"闭包是一个将函数与环境一起存储的记录,它是一个映射,它将函数的每个自由变量(本地使用的变量,但在封闭范围中定义)与或存储位置相关联.在创建闭包时绑定了名称." (重点补充).