1、扩展方法和扩展属性
1.1、自定义类示例
//自定义类
class Human(var name: String = "") {
fun showInfo() {
println("名字: $name")
}
}
//扩展方法
fun Human.showName() {
println("扩展方法: Name-$name")
}
//扩展方法
fun Human.setName(name: String) {
this.name = name
}
//扩展属性
val Human.nameLength: Int get() = name.length
fun main(){
val h = Human("leon")
h.showName()
h.setName("alex")
val nameLength = h.nameLength
}
1.2、系统类扩展
//扩展方法
fun String.replaceLastChar(c: Char) = this.substring(0, length - 1) + c
//扩展属性
val String.myLastChar: Char get() = this[length - 1]
fun main(){
val str = "123456"
val lastChar = str.myLastChar //6
val replaceStr = str.replaceLastChar('A') //12345A
}
2、泛型扩展
示例1
fun <T : View> Int.getViewById() = findViewById<T>(this)
fun <T : TextView> Int.setText(text: String?) {
val view = findViewById<T>(this)
if (view is TextView) {
view.text = text
}
}
R.id.id_btn_login.getViewById<Button>().setOnClickListener {
}
R.id.id_tv_title.setText<TextView>("扩展方法")
示例2
fun <T> MutableList<T>.swap(index1: Int, index2: Int) {
val temp = this[index1]
this[index1] = this[index2]
this[index2] = temp
}
val list = mutableListOf<Int>(1, 2, 3, 4)
list.swap(0, 2)
3、伴生对象扩展
class Book {
companion object {
var bookName: String = ""
fun show() {
println("This a book")
}
}
}
//扩展方法
fun Book.Companion.setBookName(name: String) {
bookName = name
}
//扩展方法
fun Book.Companion.showBookName() {
println("The book is $bookName")
}
//扩展属性
val Book.Companion.bookNameLength: Int get() = bookName.length
Book.setBookName("Kotlin")
Book.showBookName()
val bookNameLength = Book.bookNameLength