Step into Kotlin - 18 - Extension 与 this

目录

摘要

扩展方法,扩展成员,扩展伴生类,this 表达式

Extension 与 this

Extension

概念
  • Extension 用于对类的行为或者属性进行拓展(包括内置的类)。
  • 当扩展的行为或属性与类内部定义的行为或属性重名时,扩展功能无效。
扩展类的行为

定义一个类

class Num(var x: Int) {
    fun add(y: Int) {
        x += y
    }

    fun foo() {
        println("foo in Num")
    }
}

扩展类

fun Num.add(x: Int, y: Int) {
    this.x += x + y
}

使用扩展的行为

var n: Num = Num(10)
n.add(1, 3)
扩展类的成员

为 List 类添加一个成员

val <T> List<T>.second: T
    get() = get(1)

使用扩展的成员

val l: List<Int> = listOf(1, 2, 3)
println(l.second)  //  2
扩展伴生类
class MyClass {
    companion object {}
}
class MyClass {
    companion object {}
}
MyClass.foo()

this

class A { // 隐式标签 @A

    fun bar(){
      val t = this  //类的成员,表示当前对象
    }

    inner class B { // 隐式标签 @B

        // 扩展类的行为
        fun Int.foo() { // 隐式标签 @foo
            val a = this@A // A's this
            val b = this@B // B's this

            // 没有限定符时,表示当前所在的最小范围
            val c = this // foo()的接收器,这里是数字 10
            val c1 = this@foo // foo()的接收器,这里是数字 10

            val funLit = { ->
                val d = this // funLit 的接收器,这里是 Function0<Unit>
            }

            val funLit2 = { s: String ->
                val d1 = this// funLit2 的接收器,这里是 Function1<String, Unit>
            }
        }

        fun info() {
            10.foo()
        }
    }
}

A().B().info()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值