如果在具有类型参数的接口上定义了方法,则kotlinFunction返回null
问题的快速演示:如果在具有类型参数的接口上定义了方法,则kotlinFunction返回null,kotlin,kotlin-reflect,Kotlin,Kotlin Reflect,问题的快速演示: import kotlin.reflect.jvm.kotlinFunction 接口A{ 趣味aaa(t:t):弦乐{ 返回“” } } B类:A 主要内容(){ println(B::class.java.methods[0].kotlinFunction)//返回null } 对不带类型参数的方法调用kotlinFunction会按预期返回KFunction的实例。原因是类型擦除,在Java中发生,但在Kotlin中没有: 爪哇: public java.lang.St
import kotlin.reflect.jvm.kotlinFunction
接口A{
趣味aaa(t:t):弦乐{
返回“”
}
}
B类:A
主要内容(){
println(B::class.java.methods[0].kotlinFunction)//返回null
}
对不带类型参数的方法调用
kotlinFunction
会按预期返回KFunction
的实例。原因是类型擦除,在Java中发生,但在Kotlin中没有:
爪哇:
public java.lang.String B.aaa(java.lang.Object)
科特林:
public java.lang.String B.aaa(java.lang.String)
注意,它只是Kotlin编译器为反射保留了更多的信息,JVM在运行时仍然会删除类型,不管Kotlin与否
如果需要访问Kotlin方法,请直接执行以下操作:
println(B::class.functions.first())
Alexey,谢谢您的快速回复。我在使用spring框架时遇到了这个问题,特别是使用,因此我无法更改源代码。我想我想为自己澄清的是,这是否是kotlin或spring框架中的一个bug。老实说,我说不出来,因为它与您最初的问题大不相同。看看SpringFu代码,我建议对它们打开一个bug,因为转换看起来确实很危险。