首页
学习
活动
专区
圈层
工具
发布

【Kotlin】扩展函数 ③ ( 定义扩展文件 | 重命名扩展函数 | Kotlin 标准库扩展函数 )

文章目录 一、定义扩展文件 二、重命名扩展函数 三、Kotlin 标准库扩展函数 一、定义扩展文件 ---- 如果定义的 扩展函数 需要在 多个 Kotlin 代码文件 中使用 , 则需要在 单独的...Kotlin 文件 中定义 , 该文件被称为 扩展文件 ; 定义 标准库函数 的 Standard.kt 就是 独立的 扩展文件 ; 代码示例 : 扩展文件一般都 单独定义在一个 Package 中..., 命名一般是 XxxExt.kt , 在该代码中扩展文件定义在了 kim.hsl.extension 包中 , 扩展文件名称是 IterableExt.kt ; package kim.hsl.extension...类提供的扩展函数 , 定义在 Sequences.kt 代码中 ; 为 Range 类提供的扩展函数 , 定义在 Ranges.kt 代码中 ; 为 Map 类提供的扩展函数 , 定义在 Maps.kt..., 造成堆内存开销 ; 该函数中涉及到 两个泛型 T 和 R , 在 fun 关键字后声明 , 为 泛型 T 定义了一个扩展函数 let , 传入 (T) -> R 类型的匿名函数 , 该 Lambda

1.8K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Kotlin】扩展函数 ① ( 扩展函数简介 | 为 Any 超类定义扩展函数 | private 私有扩展函数 | 泛型扩展函数 | 标准函数 let 函数是泛型扩展函数 )

    ): 返回值类型 { 函数体 } 定义扩展函数 与 定义普通函数唯一的区别是 扩展函数 前多了 类名. ; 下面的代码中 , 为 String 定义扩展函数 , 拼接原字符串和扩展函数参数 , 并将结果返回...超类中定义了扩展函数 , 则在整个项目中 , 该扩展函数都有效 ; 这就导致了 Kotlin 的框架非常灵活 , 使用别人的 SDK 时会发现 为各种现有类定义的 扩展函数 ; 代码示例 : 在下面的代码中...---- 如果 扩展函数 使用 private 修饰 , 则该扩展函数 只在该 Kotlin 代码文件中有效 , 在其它的 Kotlin 代码中就无法调用了 ; 代码示例 : 在 Hello.kt 代码中..., 使用 private 定义了 Any 超类的扩展函数 , 在本代码中的 main 函数中调用该扩展函数是有效的 ; private fun Any.printSelf() { println...就是 接收者泛型参数类型 ; fun T.函数名(参数列表): T { 函数体 } 代码示例 : 在该代码中 , 定义了一个 泛型扩展函数 , 为泛型 T 定义了扩展函数 printSelf

    2.2K20

    【Kotlin】apply 内联扩展函数 ( apply 函数原型 | apply 函数示例 | Kotlin 调用 Java API )

    内联扩展函数 apply II . Kotlin 调用 Java API III . apply 内联扩展函数示例 ( 调用 Java API 处理图像 ) I ....内联扩展函数 apply ---- 1 . apply 函数原型 : 泛型 T 类型对象 , 调用 apply 方法 , 后面定义了一个闭包代码块 ; 调用 apply 方法的对象类型是泛型 , 说明任何对象都可以调用该方法...Kotlin 调用 Java API ---- Kotlin 与 Java 代码是完全兼容的 , 因为其都是基于 Java 虚拟机的语言 ; Kotlin 中可以调用 Java 语言的类和方法 ; Java...语言中也可以调用 Kotlin 的类和方法 ; 因此 Kotlin 中是可以调用 Java 的 API 函数库的 , 这极大的拓展了 Kotlin 的功能 ; III . apply 内联扩展函数示例...: 作用 : 扩展了调用 apply 函数的泛型类型 T 的对象的操作方法 , 等同于为泛型 T 对象定义了一个新的方法 特点 : 在 apply 后的闭包内

    3.1K20

    【Kotlin】扩展函数总结 ★ ( 超类扩展函数 | 私有扩展函数 | 泛型扩展函数 | 扩展属性 | 定义扩展文件 | infix 关键字用法 | 重命名扩展函数 | 标准库扩展函数 )

    超类中定义了扩展函数 , 则在整个项目中 , 该扩展函数都有效 ; 这就导致了 Kotlin 的框架非常灵活 , 使用别人的 SDK 时会发现 为各种现有类定义的 扩展函数 ; 代码示例 : 在下面的代码中...---- 如果 扩展函数 使用 private 修饰 , 则该扩展函数 只在该 Kotlin 代码文件中有效 , 在其它的 Kotlin 代码中就无法调用了 ; 代码示例 : 在 Hello.kt 代码中...就是 接收者泛型参数类型 ; fun T.函数名(参数列表): T { 函数体 } 代码示例 : 在该代码中 , 定义了一个 泛型扩展函数 , 为泛型 T 定义了扩展函数 printSelf...就是 独立的 扩展文件 ; 代码示例 : 扩展文件一般都 单独定义在一个 Package 中 , 命名一般是 XxxExt.kt , 在该代码中扩展文件定义在了 kim.hsl.extension...类提供的扩展函数 , 定义在 Sequences.kt 代码中 ; 为 Range 类提供的扩展函数 , 定义在 Ranges.kt 代码中 ; 为 Map 类提供的扩展函数 , 定义在 Maps.kt

    3.9K30

    Kotlin Vocabulary | 使用 Kotlin 中的扩展提升代码可读性

    代码中调用扩展函数 扩展函数并不属于我们要扩展的类的一部分,因此当我们在 Java 语言中尝试调用该方法时,并不能在该类的其它方法中找到它。...正如我们稍后所看到的,扩展会在其被定义的文件中反编译成静态方法,并接收一个我们要扩展的类的实例作为参数。以下就是在 Java 中调用 printDogInformation() 扩展函数的示例代码。...当您扩展了一个不属于您定义的类型,而该类型所在的代码库中存在一个同您的扩展具有相同签名的扩展函数,那么上述所说的这种行为就会显现出后果。...在这种情况下,会调用代码库中的扩展函数,而您所得到的唯一信息是您所定义的扩展函数变成了一个未被使用的方法。...工作原理 我们可以在 Android Studio 中对 printDogInformation() 反编译,方法是在 Tools/Kotlin/Show Kotlin Bytecode 中点击 Decompile

    1.7K10

    Android开发中的Kotlin扩展函数技巧!

    在Kotlin中,扩展函数是一种非常有用的功能,可以让我们向现有的类添加新的功能,而无需修改类的源代码。在本文中,我们将探讨Kotlin扩展函数的原理和运用,以及如何在Android开发中使用它们。...什么是扩展函数? 扩展函数是Kotlin中的一种特殊函数,它允许我们向一个类添加新的函数,而无需继承或修改这个类的源代码。扩展函数的语法非常简单,只需要在函数名前面加上类名,并用点号隔开即可。...代码复用性更高:使用扩展函数可以让我们在多个类中共享同一段代码,从而提高了代码的复用性。 扩展函数的局限性 尽管扩展函数在许多情况下非常有用,但也存在一些限制。...同时,在使用扩展函数时,需要注意它们的限制并遵循最佳实践。 在Android开发中使用扩展函数 在Android开发中,扩展函数可以帮助我们简化代码,提高开发效率。...(id) } 在上面的代码中,我们定义了一个名为findView的扩展函数,接收一个Int类型的参数id,并返回一个View类型的结果。

    1.2K20

    【Kotlin】扩展函数 ② ( 扩展属性 | 为可空类型定义扩展函数 | 使用 infix 关键字修饰单个参数扩展函数的简略写法 )

    文章目录 一、扩展属性 二、可空类扩展 三、使用 infix 关键字修饰单个参数扩展函数的简略写法 一、扩展属性 ---- 上一篇博客 【Kotlin】扩展函数 ( 扩展函数简介 | 为 Any 超类定义扩展函数...| private 私有扩展函数 | 泛型扩展函数 | 标准函数 let 函数是泛型扩展函数 ) 中 , 介绍了给 现有类 定义 扩展函数 , 此外还可以 给现有类定义 扩展属性 ; 为现有类定义 扩展属性...函数 ; 代码示例 : 在该代码中 , 为 String 类型定义了 扩展属性 extAttribute , 由于是 val 只读变量 , 因此必须在其 setter 函数 中进行初始化变量 , 并且...---- 之前讲的定义扩展函数 , 扩展属性 , 都是为 非空类型 定义的 , 如果要为 可空类型 定义扩展函数 , 则需要在 扩展函数 中 处理时 , 要多考虑一层 接收者 this 为空 的 情况...非空类型扩展函数 如果定义的 扩展函数 是为 可空类型定义的 , 可空类型变量 想要调用该 扩展函数 , 在调用时直接使用 " . " 进行调用即可 ; 可空类型实例对象.可空类型扩展函数 代码示例

    3K30

    在Python中定义Main函数

    本文结束时,您将了解以下内容: 什么是特殊的name变量以及Python中如何定义它 为什么要在Python中使用main()函数 在Python中定义main()函数有哪些约定 main()函数中应该包含哪些代码的最佳实践...Python中的基本main()函数 一些Python脚本中,包含一个函数定义和一个条件语句,如下所示: 此代码中,包含一个main()函数,在程序执行时打印Hello World!。...本文将如下示例文件保存为execution_methods.py,以探索代码如何根据上下文改变行为: 在此文件中,定义了三个对print()函数的调用。前两个打印一些介绍性短语。...不过,在强调代码目的时,还是存在细微的差异: 文件:通常,Python文件是包含代码的任何文件。大多数Python文件的扩展名为.py。...在导入过程中,Python执行指定模块中定义的语句(但仅在第一次导入模块时)。

    6.1K30

    【Kotlin】Kotlin 与 Java 互操作 ③ ( Kotlin 中处理 Java 异常 | Java 中处理 Kotlin 异常 | @Throws 注解处理异常 | 函数类型互相操作 )

    1、Java 调用 Kotlin 中的 匿名函数解决方案 2、Kotlin 中 匿名函数代码示例 3、Java 中 调用 Kotlin 匿名函数代码示例 一、Kotlin 中处理 Java 异常 -...: Xxx.XxException 错误信息 ; 抛出异常代码示例 : 在该代码的 exceptionDemo 函数中 , 抛出了 IOException 异常 , 在 Java 中调用 exceptionDemo..., 没有在编译时报错 ; 2、Kotlin 中调用 Java 抛出异常函数 在 Kotlin 代码中调用上述 函数 , 可以不需要 强制处理 抛出的异常 ; fun main() { var...中 匿名函数代码示例 在 Kotlin 中 , 定义了 函数类型变量 , 下面的 KotlinMethod 类中 , 定义了 lambda 类型成员 , 该成员是 函数类型变量 , 该 函数类型变量的...Kotlin 匿名函数代码示例 在 Java 中 , 从 获取的是 kotlin.jvm.functions.Function1 类型的变量 , 调用其 invoke 函数 , 即可 执行该 Kotlin

    1.8K10

    From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了

    在 Kotlin 当中,它有一个名字,叫做接收者(Receiver),也就是扩展函数的接收方。 注释③,lastElement(),是我们定义的扩展函数的名称。 注释④,“Char?”...只是编译器帮我们做了很多事情, 让代码写起来更简洁。 --- 扩展属性 而扩展属性,则是在类的外部为它定义一个新的成员属性。...--- 扩展函数在 Android 中的案例 用扩展函数简化Toast的用法: 这是Toast的标准用法,在界面上弹出一段文字提示,代码很长。...Kotlin对此并没有进行限制,但是通常不建议在Lambda 表达式中编写太长的代码,否则可能会影响代码的可读性。 Lambda也可以理解为是匿名函数的简写。...--- Kotlin 中引入高阶函数会带来几个好处:一个是针对定义方,代码中减少了接口类的定义;另一个是对于调用方来说,代码也会更加简洁。

    2K80

    FFmpeg代码导读——HEVC在RTMP中的扩展

    HEVC在RTMP中的扩展 为推进HEVC视频编码格式在直播方案中的落地,经过CDN联盟讨论,并和主流云服务厂商达成一致,规范了HEVC在RTMP/FLV中的扩展,具体修改内容见下。...4.1 FLV规范扩展 HEVC为视频编码格式,因此对FLV规范的扩展,只集中在Video Tag,其它部分,无任何改动。...由第二章节的阐述可知,FLV的解复用和复用功能代码分别在libavformt/flvdec.c和libavformat/flvenc.c中,扩展后的修改也都集中在这两个文件。...4.2.1 编码类型定义 libavformat/flv.h中按照VideoTagHeader中的CodecID定义了一组视频编码格式的枚举值,扩展后的枚举定义如下: enum { FLV_CODECID_H263...HEVC与AVC视频帧在FLV中的存放格式相同,所以只需在读取Video Tag的地方增加AV_CODEC_ID_HEVC的判断条件即可,调整后的代码如下: if (st->codecpar->codec_id

    2.4K20

    Arrow库:函数式编程在Kotlin Android中的深度实践

    found") } }}IO Monad的声明式解决方案:import arrow.fx.coroutines.IOimport arrow.fx.coroutines.parZip// 定义纯...编译时安全保障:通过类型系统消除运行时异常声明式代码结构:业务逻辑清晰可见强大的组合能力:通过map/flatMap构建复杂流程卓越的调试体验:可追踪的异步操作链与Kotlin协程深度集成:无缝接入现代...可维护的代码结构:纯函数带来的可测试性迁移路线建议:从工具类开始试验Option/Either逐步改造网络层返回类型在复杂业务流中引入IO Monad最后处理UI层的状态映射graph TD A...] G --> J[错误处理统一] H --> K[组合业务流] I --> L[全面函数式架构] J --> L K --> L扩展阅读:《Domain Modeling...Made Functional》- Scott WlaschinArrow官方文档:https://arrow-kt.io/docs/core/Kotlin协程最佳实践

    47800

    怎么在Java中自定义注解?

    Java内置的注解 先说说Java内置的三个注解,分别是: @Override:检查当前的方法定义是否覆盖父类中的方法,如果没有覆盖,编译器就会报错。...SOURCE:在源文件中有效(即源文件保留),仅出现在源代码中,而被编译器丢弃。 CLASS:在class文件中有效(即class保留),但会被JVM丢弃。...定义注解 首先定义注解@LogApi,在方法上使用,为了能在反射中读取注解信息,当然是设置为RUNTIME。...最关键的一步来了,解析注解,一般在项目中会使用Spring的AOP技术解析注解,当然如果只需要解析一次的话,也可以使用Spring容器的生命周期函数。...我们也可以在这个例子中,学会使用注解和切面编程,可谓是一举两得! 总结 注解的使用能大大地减少开发的代码量,所以在实际项目的开发中会使用到非常多的注解。

    4.1K30

    【Android Gradle 插件】Gradle 自定义 Plugin 插件 ④ ( 为自定义 Gradle 插件的扩展配置扩展 | 在自定义插件中获取扩展属性 )

    扩展 ) 中 , 实现了 自定义插件 的 扩展 Extension , 在 Module 模块下的 build.gradle 构建脚本中 , android 配置块 就是一个 AppExtension...扩展 , 但是在 android 扩展下又定义了 defaultConfig 扩展 , 这是一个 ProductFlavor 配置 ; android { compileSdkVersion...自定义 Plugin 插件 的 Extension 扩展 中 , 再 定义一层 Extension 扩展 ; 二、为自定义 Gradle 插件的扩展配置扩展 并 获取扩展属性 ---- 定义扩展类 :...def name def age } 声明扩展 和 扩展的扩展 : 通过调用 project.扩展名.扩展属性 可获取在构建脚本中配置的 扩展属性 , 通过调用 project.扩展名....扩展的扩展名.扩展属性 可获取在构建脚本中配置的 扩展属性 的 扩展属性 ; import org.gradle.api.Plugin import org.gradle.api.Project class

    3.9K10
    领券