Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/162.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泛型将不会编译_Kotlin - Fatal编程技术网

Kotlin泛型将不会编译

Kotlin泛型将不会编译,kotlin,Kotlin,在一个问题上被困了很长一段时间。这段代码无法编译。我在第4行得到一个错误,类型不匹配,发现B需要类型A,即使B是类型A。我通过将B转换为typeA,找到了一种解决这个问题的方法,但这似乎是一种可怕的方法(未经检查的转换)。将返回类型更改为A也会起作用。我猜聪明的演员不够聪明 class Test<typeA : A<C>> { fun returnB(): typeA { return B() } } open class A<

在一个问题上被困了很长一段时间。这段代码无法编译。我在第4行得到一个错误,
类型不匹配,发现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类型。