Kotlin学习:扩展函数

date
May 26, 2023
slug
30
status
Published
tags
Android
Kotlin
summary
不少现代高级编程语言中有扩展函数这个概念,Java却一直以来都不支持这个非常有用的功能。值得高兴的是Kotlin给我们带来了这个功能。
type
Post
Book

扩展函数

什么是扩展函数?

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

语法结构

fun ClassName.methodName(param1: Int, param2: Int): Int{
	return 0
}
定义扩展函数只需要在函数名的前面加上一个ClassName.的语法结构,就表示将该函数添加到指定类当中。

统计字符串中字母数量

在你不了解扩展函数去实现这个功能时,你可能会想到写出如下函数:
object StringUtil {
	fun lettersCount(str: String): Int {
		var count = 0
		for(char in str) {
			if(char.isLetter()) {
				count++
			}
		}
	}
}
这里先定义了一个StringUtil单例类,然后在这个单例类中定义了一个letterCount()函数,该函数接收一个字符串参数。在letterCount()方法中,我们使用for-in循环去遍历字符串中的每一个字符。如果该字符是一个字母的话,那么就将计数器加1,最终返回计数器的值。
这是Java编程中最标准的实现思维。但是有了扩展函数之后就不一样了,我们可以使用一种更加面向对象的思维来实现这个功能,比如说将lettersCount()函数添加到String类当中。
由于我们希望向String类添加一个扩展函数,因此需要先创建一个String.kt文件。文件名虽然并没有固定的要求。但建议向哪个类中添加扩展函数,就定义一个同名的Kotlin文件,这样便于你以后查找。
//String.kt

fun String.letterCount(): Int {
	var count = 0
	for (char in this) {
		if(char.isLetter()) {
			count++
		}
	}
	return count
}
这里将letterCount()方法定义成了String类的扩展函数,那么函数中就自动拥有了String实例的上下文。所以不需要接收一个字符串参数。
定义好之后,统计某个字符串中的字母数量只需要这样写即可:
val count = "ABCDSADAEWA123@@!".letterCount()
 

© LewisWong 2021 - 2025