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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KillerNoBlood

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值