【Kotlin】扩展函数

本文讲解 Kotlin 扩展函数用法。

 扩展函数官方文档

扩展函数表示即使在不修改某个类的源码的情况下,仍然可以打开这个类,向该类添加新的函数。

 

举个例子:

有一段字符串 "QWER123!@#",包含字母、数字和特殊符号等字符,现在想统计字符串中字母的数量。

如果不使用 Kotlin 扩展函数,示例如下:

object StringUtil {

    fun statistics(string: String): Int {
        var count = 0
        for (char in string) {
            if (char.isLetter()) {
                count++
            }
        }
        return count
    }
}

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        ...

        val str = "QWER123!@#"
        val count = StringUtil.statistics(str)
    }
}

定义一个 StringUtil 单例类,然后在这个单例类中定义了一个 statistics() 函数,该函数接收一个字符串参数。在 statistics() 函数中,使用 for-in 循环去遍历字符串中的每一个字符。如果该字符是一个字母的话,那么就将计数器加 1,最终返回计数器的值。


 

使用扩展函数优化该功能

扩展函数语法结构:

fun ClassName.methodName(param1: Int, param2: Int): Int {
    return 0
}

定义扩展函数只需要在函数名的前面加上 ClassName. 的语法结构,就表示将该函数添加到指定类当中。

 

创建一个 String.kt 文件,将扩展函数定义成顶层函数,这样可以让扩展函数拥有全局的访问域:

fun String.statistics(): Int {
    var count = 0
    for (char in this) {
        if (char.isLetter()) {
            count++
        }
    }
    return count
}

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        ...

        val count = "QWER123!@#".statistics()
    }
}

将 statistics() 函数定义成了 String 类的扩展函数,那么函数中就自动拥有了 String 实例的上下文。因此 statistics() 函数就不再需要接收一个字符串参数了,而是直接遍历 this 即可,因为现在 this 就代表着字符串本身。


 

如果本文对你有帮助,请点赞支持!!!

你可能感兴趣的:(Kotlin)