Kotlin扩展

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

你可能感兴趣的:(Kotlin,Learning,kotlin,android,开发语言)