Kotlin泛型将不会编译
在一个问题上被困了很长一段时间。这段代码无法编译。我在第4行得到一个错误,Kotlin泛型将不会编译,kotlin,Kotlin,在一个问题上被困了很长一段时间。这段代码无法编译。我在第4行得到一个错误,类型不匹配,发现B需要类型A,即使B是类型A。我通过将B转换为typeA,找到了一种解决这个问题的方法,但这似乎是一种可怕的方法(未经检查的转换)。将返回类型更改为A也会起作用。我猜聪明的演员不够聪明 class Test<typeA : A<C>> { fun returnB(): typeA { return B() } } open class A<
类型不匹配,发现B需要类型A
,即使B
是类型A。我通过将B
转换为typeA
,找到了一种解决这个问题的方法,但这似乎是一种可怕的方法(未经检查的转换)。将返回类型更改为A
也会起作用。我猜聪明的演员不够聪明
class Test<typeA : A<C>> {
fun returnB(): typeA {
return B()
}
}
open class A<c : C>
class B : A<C>()
open class C
类测试{
fun returnB():类型A{
返回B()
}
}
公开甲级
B类:A()
公开课C
您的代码在概念上不正确
声明Test
意味着typeA
可以采用A
的子类型之一。它可能是也可能不是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
D类:A()
val testD=Test()
val result=testD.returnB()//结果应该是D,因为testD的typeA有D
fun returnB():typeA
,则应为每个可能的typeA
返回值typeA
,而不仅仅是在B
的情况下。上面的例子将typeA
替换为D
,因此表明从testD.returnB()
返回B
是不正确的。FWIW,类型(包括类型参数)通常保留大写字母。但答案是B不是typeA类型。