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()