0

一个问题的快速演示:

import kotlin.reflect.jvm.kotlinFunction

interface A<T> {
    fun aaa(t: T): String {
        return ""
    }
}

class B : A<String>

fun main() {
    println(B::class.java.methods[0].kotlinFunction) // returns null
}

调用没有类型参数的方法会按预期kotlinFunction返回一个实例。KFunction

4

1 回答 1

0

原因是类型擦除,它发生在 Java 中,但不在 Kotlin 中:

爪哇: public java.lang.String B.aaa(java.lang.Object)

科特林: public java.lang.String B.aaa(java.lang.String)

https://github.com/JetBrains/kotlin/blob/master/core/reflection.jvm/src/kotlin/reflect/jvm/ReflectJvmMapping.kt#L134

请注意,它只是 Kotlin 编译器保留了更多反射信息,类型仍会在运行时被 JVM 擦除,不管 Kotlin 与否。

如果需要访问 Kotlin 方法,直接做:

println(B::class.functions.first())
于 2020-03-21T22:00:59.420 回答