Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.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
Kotlin泛型类型不匹配 fun Array.reflect():Array=this.map{it?.reflect()}.toTypedArray()_Kotlin_Generics_Type Inference - Fatal编程技术网

Kotlin泛型类型不匹配 fun Array.reflect():Array=this.map{it?.reflect()}.toTypedArray()

Kotlin泛型类型不匹配 fun Array.reflect():Array=this.map{it?.reflect()}.toTypedArray(),kotlin,generics,type-inference,Kotlin,Generics,Type Inference,映射的lambda中的编译时错误 类型不匹配:推断类型为KFunction?,但应为K 我感到困惑的原因是,如果将K定义为KFunction的任何子类型,为什么KFunction?不是K 正如您所说的K是KFunction的一个子类型,但是Function.reflect()不返回K,它返回KFunction,其中需要类型为K的值。考虑这个例子: fun <R, F : Function<R>?, K : KFunction<R>?> Array<

映射
的lambda中的编译时错误

类型不匹配:推断类型为
KFunction?
,但应为
K

我感到困惑的原因是,如果将
K
定义为
KFunction
的任何子类型,为什么
KFunction?
不是
K

正如您所说的
K
KFunction
的一个子类型,但是
Function.reflect()
不返回
K
,它返回
KFunction
,其中需要类型为
K
的值。考虑这个例子:

    fun <R, F : Function<R>?, K : KFunction<R>?> Array<F>.reflect(): Array<K> = this.map<F, K> { it?.reflect<R>() }.toTypedArray()
如果您有任何问题,请留下评论。

(1)函数存在()(2)我感到困惑的原因是,如果将
K
定义为
KFunction?
的任何子类型,那么为什么
K
不是
K
(注意)我不想问这个问题,因为我不知道编译时错误的原因。我这样问是因为我不明白为什么会这样。
class A : KFunction<String> {
    // ...implements all methods of KFunction<String>
}

arrayOf({ "foo" }).reflect<String, () -> String, A>()
fun <R> Array<out Function<R>?>.reflect(): Array<KFunction<R>?> =
        this.map { it?.reflect<R>() }.toTypedArray()