Kotlin 泛型 lambda 类型不匹配。必填:什么都没有

问题描述 投票:0回答:1

我在使用 Kotlin 泛型和 lambda 时遇到问题。 基本上我希望我的接口在泛型类型上有一个 lambda 函数。 这是一些示例代码,显示了我想要做什么。

interface A<T : B, U : C> {
    fun where(rdm: (T) -> U): A<T, U>
}

interface B {
    fun debugB(): C
}

interface C


class D : B {
    override fun debugB(): F {
        return F()
    }

    fun toto() {
    }
}

class F : C


class test : A<D, F> {
    override fun where(rdm: (D) -> F): test {
        return this
    }
}

class main() {
    init {
        val test: A<*, *> = test()
        test.where { q -> q.debugB() }
    }
}

问题是,当我尝试执行以下操作时收到错误消息:

test.where { q -> q.debugB() }
Type mismatch. Required: Nothing found: C
。 我觉得这真的很奇怪,因为它能够将
q
的类型解析为
B
但它可以找到正确的返回类型。

(我尝试过

in
out
,但都不起作用。)

kotlin generics lambda
1个回答
0
投票

不确定为什么要在

val test
对象中显式设置星号。通过这样做,您可以防止
test
对象访问
interface B

允许编译器通过在调用构造函数时简单地删除类型来推断类型。

val test = Test()
test.where { q -> q.debugB() }
© www.soinside.com 2019 - 2024. All rights reserved.