前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是闭包,Java中有闭包吗?

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

作者头像
半月无霜
发布2023-03-14 09:17:57
2.1K0
发布2023-03-14 09:17:57
举报
文章被收录于专栏:半月无霜

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

一、介绍

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

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

二、演示

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

代码语言:javascript
复制
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表达式,使得编码速度大大提升,语法结构也变得大同小异了起来

使用如下,是不是差不多

代码语言:javascript
复制
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表达式

三、最后

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是闭包,Java中有闭包吗?
    • 一、介绍
      • 二、演示
        • 三、最后
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档