package com.demo.kotlin
fun String.firstChar(): String {
if (this.length == 0) {
return ""
}
return this[0].toString()
}
fun String.lastChar(): String {
if (this.length == 0) {
return ""
}
return this[this.length - 1].toString()
}
然后在可以直接调用
package com.demo.kotlin
object Text {
@JvmStatic
fun main(args: Array) {
println("abc".firstChar())
println("qwe".lastChar())
}
}
输出结果如下
a
e
如果不在同一个包名下,导入一下引用就可以了,系统会提示自动导入的
package com.demo.kotlin.t
import com.demo.kotlin.firstChar
import com.demo.kotlin.lastChar
object Test1 {
@JvmStatic
fun main(args: Array) {
"test".firstChar()
"test".lastChar()
}
}
fun List.filter(predicate: (T) -> Boolean): MutableList {
val result = ArrayList()
this.forEach {//this指的是调用者对象
if (predicate(it)) {//如果满足循环条件
result.add(it)
}
}
return result
}
调用如下
object Text {
@JvmStatic
fun main(args: Array) {
val list = mutableListOf(1, 2, 3, 4, 5, 6, 7)
val filter = list.filter { it % 2 == 0 }
println(filter)
}
}
输出如下
[2, 4, 6]
为MutableList扩展一个firstElement属性
var MutableList.firstElement: T
get() { //扩展属性的get函数
return this[0]
}
set(value) { //扩展属性的set函数
this[0] = value
}
调用如下
object Text {
@JvmStatic
fun main(args: Array) {
val list = mutableListOf(1, 2, 3, 4, 5, 6, 7)
println(list.firstElement)
list.firstElement = 100
println(list)
}
}
输出如下
1
[100, 2, 3, 4, 5, 6, 7]
扩展属性和扩展函数的本质是以静态导入的方式来实现的。
下面是String.firstChar反编译的java代码
@NotNull
public static final String firstChar(@NotNull String $receiver) {
Intrinsics.checkParameterIsNotNull($receiver, "$receiver");
return $receiver.length() == 0 ? "" : String.valueOf($receiver.charAt(0));
}