【解密 Kotlin 扩展函数】扩展函数的导入和使用(十七)

server/2024/9/24 12:21:32/

导读大纲

      • 1.1.1 将 joinToString 函数作为 String 类型的扩展函数
      • 1.1.2 导入和使用扩展函数

1.1.1 将 joinToString 函数作为 String 类型的扩展函数

  1. 在之前的教程中, 我们已经基本实现 joinToString 函数
    • 自定义joinToString 函数–传送门
    • <1> 将原本第一个参数collection: Collection<T>作为扩展函数的接收器类型: Collection
    • <2> 与之前一样,为参数指定默认值
    • <3> 关键字this指的是接收器对象,即Collection的实例化对象
      1. 相当于将原先函数的第一个参数全部替换为this关键字
    • <4> 这里的 list 是Collection类型的实例化对象
      1. 所以可以直接将 joinToString 扩展函数作为成员方法来调用
kotlin">fun <T> Collection<T>.joinToString(              // <1>separator: String = ", ",                    // <2>prefix: String = "",                         // <2>postfix: String = ""                         // <2>
) : String {val result = StringBuilder(prefix)for ((index, elem) in this.withIndex()){     // <3>if (index > 0) result.append(separator)result.append(elem)}result.append(postfix)return result.toString()
}
=============================================
fun main() {val list = listOf(1, 2, 3)                 // <4>println(list.joinToString(                     // <4>separator = "; ",prefix = "(",postfix = ")"))// (1; 2; 3)
}
  1. 现在, 调用 joinToString 方法时,可以遵循函数定义,省略默认值以及使用命名参数
    • <1> 这里只传递一个参数"separator",其余参数使用默认值,可以看到输出符合预期
kotlin">fun main() {val list = listOf(1, 2, 3)println(list.joinToString(" "))            // <1>// 1 2 3
}

1.1.2 导入和使用扩展函数

  1. 定义扩展函数后,它不会自动在整个项目中可用
    • 相反,它需要像其他类或函数一样被导入,这有助于避免意外的名称冲突
    • <1> Kotlin 允许你使用与类相同的语法导入单个函数
      1. 另外是否能导入类或函数取决于其可见性修饰符
      2. 比如,一旦该扩展函数声明为 private,则只能在定义的文件中使用无法导入
    • <2> 当然,通配符(*)导入也可以很好工作
kotlin">import strings.lastChar
fun main() {println("hhh".lastChar())
}
====================================  <2>
import strings.*
val c = "Kotlin".lastChar()
  1. 可以使用 as 关键字为导入的类或函数取别名
kotlin">import strings.lastChar as last
fun main() {println("hhh".last())
}
  1. 如果在不同的包中有多个同名函数
    • 并希望在同一文件中使用它们,那么导入时更改名称就非常有用
    • 对于普通类或函数,在这种情况下还有另一种选择
      1. 可以使用全限定名引用类或函数
    • 对于扩展函数,语法要求使用简短名称
      1. 所以导入语句中的 as 关键字解决冲突的唯一方法

http://www.ppmy.cn/server/121344.html

相关文章

ELK企业级日志分析系统

目录 一、ELK日志分析系统简介 二、Elasticsearch介绍 三、Logstash介绍 四、Kibana介绍 五、部署ELK日志分析系统 一、ELK日志分析系统简介 ELK 是一套由 Elasticsearch、Logstash 和 Kibana 组成的开源日志分析系统&#xff0c;通常用于大规模的数据收集、处理和可视化分…

融智于算,聚力跃升:走进华为第二届智算集成智享会

9月18日&#xff0c;在华为全联接大会&#xff08;HUAWEI CONNECT 2024&#xff09;上&#xff0c;以“融智于算&#xff0c;聚力跃升”为主题的第二届智算集成智享会在上海圆满落幕。本次会议汇聚了不同领域的专家学者、企业领袖以及前沿技术的探索者&#xff0c;围绕智算服务…

【ARM】A64指令介绍及内存屏障和寄存器

A64指令集介绍 ISA : Instruction System Architecture 指令集总结 跳转指令 使用跳转指令直接跳转&#xff0c;跳转指令有跳转指令B&#xff0c;带链接的跳转指令BL &#xff0c;带状态切换的跳转指令BX。 B 跳转指令&#xff0c;跳转到指定的地址执行程序。 BL 带链接的跳…

list从0到1的突破

目录 前言 1.list的介绍 2.list的常见接口 2.1 构造函数&#xff08; (constructor)&#xff09; 接口说明 2.2 list iterator 的使用 2.3 list capacity 2.4 list element access 2.5 list modifiers 3.list的迭代器失效 附整套练习源码 结束语 前言 前面我们学习…

Redis布隆过滤器

Redis布隆过滤器 Redis 布隆过滤器本身并不存储实际的数据。它的主要功能是通过位数组和哈希函数来检测某个元素是否可能在集合中。布隆过滤器的工作原理如下: 添加元素:当你向布隆过滤器中添加一个元素时,布隆过滤器会通过多个哈希函数计算出该元素的哈希值,并将这些哈希…

Llama 3.1 Omni:颠覆性的文本与语音双输出模型

你可能听说过不少关于语言模型的进展,但如果告诉你,有一种模型不仅能生成文本,还能同时生成语音,你会不会觉得特别酷?今天咱们就来聊聊一个相当前沿的项目——Llama 3.1 Omni模型。这个模型打破了传统的文字生成边界,直接让文本和语音同时输出,实现了真正的"多模态…

strtok 函数和strerror函数的使用

目录 前言一、strtok 函数的使⽤1.语法和参数2.使用举例3.for循环与strtok的结和 二、strerror 函数的使用1.语法和作用2.使用举例 总结 前言 这期我们来讲字符函数strtok和strerror函数的使用&#xff0c;话不多说&#xff0c;正文开始。 一、strtok 函数的使⽤ 1.语法和参数…

C++基础知识7 list

list 1. list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 list的迭代器失效 2.1 模拟实现list 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 l…