前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Kotlin】函数 ⑨ ( Kotlin 语言中的闭包概念 | Java 语言中函数作为参数的替代方案 )

【Kotlin】函数 ⑨ ( Kotlin 语言中的闭包概念 | Java 语言中函数作为参数的替代方案 )

作者头像
韩曙亮
发布2023-03-30 18:37:40
1K0
发布2023-03-30 18:37:40
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

一、闭包概念


匿名函数 就是 Lambda 表达式 , 同时也是 闭包 , 三者的是相同的概念 ;

闭包意义 :

在 Java 中 , 通过 Package 包 , Class 类 , 将作用域区分开 ,

将变量 定义在 不同的 包 或 类中 , 可以很明显的将作用域区分开 ;

如果没有 Class 类 , 在一个 脚本文件 中 , 如 Kotlin 的脚本 , 就需要 使用 函数 进行作用域区分 ,

将一个作用域内的相关代码 , 都写在一个函数中 , 这样就可以将作用域分区分开 ;

匿名函数 作用域 :

在 匿名函数 / Lambda 表达式 / 闭包 中 , 可以 引用 作用域 之外的变量 ,

如 :

在 函数 A 中定义了 匿名函数 B , 则 在 匿名函数 B 中 , 可以引用 函数 A 中的变量 和 全局变量 ;

在 匿名函数 B 中定义了 匿名函数 C , 则 在 匿名函数 C 中 , 可以引用 匿名函数 B , 函数 A 中的变量 和 全局变量 ;

在这里插入图片描述
在这里插入图片描述

在 函数 A 中 , 不能引用 匿名函数 B 和 匿名函数 C 中的变量 ;

在 匿名函数 B 中 , 不能引用 匿名函数 C 中的变量 ;

高级函数概念 :

在 函数式编程 中 , 经常使用 高级函数 , 高级函数 是使用 函数类型变量 作为 参数 或 返回值 的 函数 ;

使用 匿名函数 / Lambda 表达式 / 闭包 作为 参数 / 返回值 的函数 是 高级函数 ;

Kotlin 中经常使用 链式调用 , 就是 函数式编程 的风格 ;

二、Java 中函数作为参数的替代方案 ( 匿名内部类 )


Kotlin 中引入 函数类型 , 将 匿名函数 / Lambda 表达式 / 闭包 作为 函数参数 或 返回值 , 可以写出 更加灵活的代码 ;

Java 8 开始 支持 Lambda 表达式 , 但是 不支持 函数 作为参数 , 也 不支持将 函数 赋值给变量 ;

Java 语言 将 函数 作为参数 的 替代方案 是 : 使用 匿名内部类 作为函数参数 ;

代码示例 : Java 代码中 , 接收 OnClickListener listener 类型的接口类型参数 , 在实际使用时 , 可以传入一个匿名内部类作为参数 , 将函数实现在匿名内部类中 ;

代码语言:javascript
复制
public class JavaMethod {
    public static void main(String[] args) {
        setClick(new OnClickListener() {
            @Override
            public void click() {
                System.out.println("On Click");
            }
        });
    }

    public interface OnClickListener {
        void click();
    }

    public static void setClick(OnClickListener listener) {
        listener.click();
    }
}

执行结果 :

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、闭包概念
  • 二、Java 中函数作为参数的替代方案 ( 匿名内部类 )
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档