记得以前写swift的时候有扩展这么一个方式,就是可以通过写extension来给类扩展新的方法,在今天看kotlin扩展方法的部分,两种实现其实差不多。这里不对swift的扩展细说,具体写法可以自己参照网上的很多例子,下面我们来看kotlin的扩展和使用。
fun String.lastChar(): Char {
return get(length - 1)
}
可以看到代码中使用了String.这样的写法,后边跟了一个我们想要的方法名称,再后边是我们的返回类型。那么get方法是String中自有的方法,还有length方法也是String自有方法,这里的使用省略了this关键字。原始写法如下
fun String.lastChar(): Char {
return this.get(this.length - 1)
}
就这样我们定义了一个扩展方法,使用方式就是直接导入定义这个扩展的包里的类,就可以使用,例如
"Hello World".lastChar() //这个时候我们就会或得最后一个字符 'd'
我们扩展这个方法是有问题的,就是没有判断要处理的String长度为0,就是为空字符串的时候的情况。正确处理如下
fun String.lastChar(): Char? {
if (length > 0) {
return get(length - 1)
}
return null
}
这样在外部使用的时候需要判断返回值是不是null了。
其他扩展也是类似,对于特殊的情况要做特殊处理,不要留下未知可能出现的问题。不然很有可能会给调用扩展方法的人带来很大的坑。
导入可以使用as来修改导入的类或函数的名称,例如
import strings.lastChar as last
“hello World”.last()
@file:JvmName(“StringFunctions”)
package com.lmm.test.kotlin.kotlintest
import java.lang.StringBuilder
fun Collection .joinString(
separator: String = “, “,
prefix: String = “”,
postfix: String = “”
): String {
val stringBuilder = StringBuilder(prefix)
for ((index, element) in withIndex()) {
if (index > 0) stringBuilder.append(separator)
stringBuilder.append(element)
}
stringBuilder.append(postfix)
return stringBuilder.toString()
}