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 几个相关的文件。