MST

星途 面试题库

面试题:Kotlin 中标准库函数与扩展函数的区别

请详细阐述 Kotlin 标准库函数和扩展函数在定义方式、调用方式、作用范围等方面的区别,并举例说明。
36.9万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

定义方式

  • 标准库函数:在 Kotlin 标准库中直接定义的函数,例如 println() 函数。这些函数是 Kotlin 标准库的一部分,无需额外引入定义,在任何 Kotlin 项目中都可直接使用。
// 标准库函数 println 定义(简化示意,实际在标准库中定义)
fun println(message: Any?) { 
    System.out.println(message) 
}
  • 扩展函数:为已有的类添加新的函数,无需继承或修改原始类。定义扩展函数时,在函数名前使用类名作为接收者类型。
// 为 String 类定义扩展函数
fun String.addExclamation() = this + "!"

调用方式

  • 标准库函数:直接使用函数名调用,例如 println("Hello")
println("这是标准库函数调用")
  • 扩展函数:像调用类的成员函数一样调用,通过对象实例来调用扩展函数。
val str = "Hello"
val result = str.addExclamation()
println(result)

作用范围

  • 标准库函数:作用于整个 Kotlin 项目,只要项目引入 Kotlin 标准库,在任何地方都能调用。
  • 扩展函数:作用范围取决于定义的位置。如果在顶层定义(不在任何类或函数内部),其作用范围是整个包含该定义的文件,也可以通过导入使其他文件使用。如果在类内部定义,作用范围仅限于该类内部。
// 在文件顶层定义的扩展函数
package com.example

fun String.addExclamation() = this + "!"

// 在类内部定义的扩展函数
class MyClass {
    fun String.addDot() = this + "."

    fun test() {
        val str = "内部"
        val result = str.addDot()
        println(result)
    }
}

在上述例子中,addExclamation 函数在 com.example 包下的文件中都可通过导入使用;而 addDot 函数只能在 MyClass 内部使用。