Kotlin 可以为现有类添加一个自定义函数,而不必修改原来类的代码, 也可以理解为拓展函数。
1. 下面的例子为 List<String> 类添加一个转化函数,使得转化成 List<Result> 对象 (Result 为自定义的类)
class ListFunctionTest {
companion object {
@JvmStatic
fun main(args: Array<String>) {
println("main start")
val nameList = mutableListOf("Tom", "Peter", "LiLei", "Jame", "Sim", "Luck")
nameList.convert().forEach {
println(it)
}
}
//为List<String> 类自定义一个函数, 它的对象可以直接调用
// 例如根据每个原始的String, 添加了id, 即转换成List<Result> 对象 返回
private fun List<String>.convert(): List<Result> {
var results = mutableListOf<Result>()
this.forEach { name ->
results.add(Result(results.size, name))
}
return results
}
data class Result(
val id: Int,
val name: String
) {
override fun toString(): String {
return "id: $id, name: $name"
}
}
}
}
输出结果:
id: 0, name: Tom
id: 1, name: Peter
id: 2, name: LiLei
id: 3, name: Jame
id: 4, name: Sim
id: 5, name: Luck
这里对 List<String> 类 自定义一个 convert() 函数, 目的是根据原始的每一个String 数据, 添加一个id, 对应为一个新的类 Result.
并把这个新的集合类List<Result> 的对象返回。
这就意味着,我们可以对原始的数据, 通过链式调用获得新的数据。
下面的 this 即表示原始的数据对象。
private fun List<String>.convert(): List<Result> {
var results = mutableListOf<Result>()
this.forEach { name ->
results.add(Result(results.size, name))
}
return results
}