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

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin函数 ⑨ ( Kotlin 语言中的闭包概念 | Java 语言中函数作为参数的替代方案 )相关的知识,希望对你有一定的参考价值。

文章目录





一、闭包概念



匿名函数 就是 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 类型的接口类型参数 , 在实际使用时 , 可以传入一个匿名内部类作为参数 , 将函数实现在匿名内部类中 ;

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();
    

执行结果 :

以上是关于Kotlin函数 ⑨ ( Kotlin 语言中的闭包概念 | Java 语言中函数作为参数的替代方案 )的主要内容,如果未能解决你的问题,请参考以下文章

kotlin语言中的类和对象

Kotlin - 高阶函数

Kotlin——基础的函数/方法详解

快速上手 Kotlin 开发系列之循环

干货丨Kotlin在Spring Boot中的应用

Kotlin 中的泛型