kotlin - Kotlin泛型无法编译

标签 kotlin

在一个问题上停留了很长时间。这段代码将无法编译。即使Type mismatch, found B require typeAB,我在第4行typeA上也遇到错误。我找到了一种通过将B转换为typeA来解决此问题的方法,但这似乎是一种可怕的方法(未经检查的强制转换)。将返回类型更改为A<C>也会起作用。我猜聪明的 Actor 还不够聪明?

class Test<typeA : A<C>> {

    fun returnB(): typeA {
        return B()
    }
}


open class A<c : C>

class B : A<C>()

open class C

最佳答案

您的代码在概念上是错误的。

声明Test<typeA : A<C>>意味着typeA可以采用A<C>的子类型之一。它可以是B,也可以不是,如果不是,则B()不是要返回的有效值。例如,您可以声明A的另一个子类型,并将Test与它一起使用:

class D : A<C>()

val testD = Test<D>()
val result = testD.returnB() // the result should be D, since testD has D for its typeA

然后,fun returnB(): typeA应该为每种可能的typeA返回typeA的值,不仅是B的情况。上面的示例用typeA替换了D,因此表明从B返回testD.returnB()是不正确的。

关于kotlin - Kotlin泛型无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49116823/

相关文章:

android - 如何执行单击 TextInputLayout EndIcon 按钮

android - Android Kotlin Pusher Chatkit-错误-需要 session 室成员

kotlin - 如何在 Kotlin 中启用断言?

android - 膨胀类 com.google.android.material.textfield.TextInputLayout 时出错

java.security.InvalidKeyException

kotlin - 在 micronaut 属性中使用数据类

Kotlin 编译器错误 : Type mismatch. 必需:CapturedType(out A) 找到:A

intellij-idea - 如何在 IntelliJ IDEA 中启用 -Dkotlinx.coroutines.debug?

android - 无法关闭与 Activity 连接的 ViewModel 中的 Realm 实例

android - 使用 Gradle 3.1.2 无法解决 Retrofit