关于 Kotlin 中的双冒号

import kotlin.reflect.KCallable
import kotlin.reflect.KClass
import kotlin.reflect.KFunction
import kotlin.reflect.KProperty

fun main(args: Array<String>) {
    println("Hello Kotlin...")

    Test().test()
}

class Test {

    val x = 2
    fun y() {}
    val z = {}

    /**
     * Function References
     * Property References
     * Constructor References
     */
    fun test() {
        val a = Test::class                 // KClass
        val b1 = Test::class.java           // Class (KClass -> Class)
        val b2 = Test::class.java.kotlin    // KClass (Class -> KClass)
        val c1 = Test::javaClass            // KProperty
        val c2 = Test()::javaClass          // KProperty
        val c3 = Test().javaClass           // Class
        val d = Test::x                     // KProperty
        val e1 = Test::y                    // KFunction & KCallable
        val e2: (Test) -> Unit = Test::y    // KFunction & KCallable (unbound function)
        val e3: () -> Unit = Test()::y      // KFunction & KCallable (bound function)
        val f = Test::z                     // KCallable
        val g = ::Test                      // KFunction & KCallable

        assert(a is KClass)
        assert(b1 is Class)
        assert(b2 is KClass)
        assert(c1 is KProperty<Class<Test>>)
        assert(c2 is KProperty<Class<Test>>)
        assert(c3 is Class<Test>)
        assert(d is KProperty<Int>)
        assert(e1 is KFunction<Unit>)
        assert(e2 is KFunction<*>)
        assert(e3 is KFunction<*>)
        assert(f is KCallable<*>)
        assert(g is KFunction<Test>)
    }

}

需要详细了解的,请查看 KClass KProperty KFunction 和 JvmClassMappingKt 几个相关的文件。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值