Kotlin的扩展函数

无需依靠继承和装饰者模式来扩展一个类的功能,通过扩展的特殊声明实现
可以通过扩展函数替代工具类

一、扩展函数

  1. 把一个类的类名作为前缀,在函数内可以直接使用该类的对象 this。如扩展 Activity 的功能
fun Activity.startActivity(cls: Class<*>) {
    startActivity(Intent(this, cls))
}
  1. 扩展函数是静态的。扩展没有实际修改他们所扩展的类,并没有给原有的类插入新的成员,即他的值是被引用时的对象类型决定。编译器会提醒
open class Person

class Student: Person()

fun Person.name() = "person"
fun Student.name() = "student"

fun printPerson(person: Person){
    println(person.name())
}

fun main() {
    // 打印为 person
    printPerson(Student())
}
  1. 扩展函数和成员函数的名称、参数列表、返回值相同时,调用的是成员函数。编译器会提醒
class Person{
    fun play(){ }
}

fun Person.play(){ }

二、扩展属性

把一个类的类名作为前缀,通过 get()/set() 扩展一个类的属性

class Person

val Person.name: String
    get() = "wmj"

// 编译出错。Extension property cannot be initialized because it has no backing field
val Person.name: String = "wmj"
    原文作者:wmjwmj
    原文地址: https://www.jianshu.com/p/6d99096da5a4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞