Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果在具有类型参数的接口上定义了方法,则kotlinFunction返回null_Kotlin_Kotlin Reflect - Fatal编程技术网

如果在具有类型参数的接口上定义了方法,则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,因为转换看起来确实很危险。