Generics 为什么这个带有泛型的Kotlin代码会产生类型不匹配的编译器错误?

Generics 为什么这个带有泛型的Kotlin代码会产生类型不匹配的编译器错误?,generics,kotlin,Generics,Kotlin,Misc.kts包含: class E fun <B> foo(): B { return E() // <--- Error here } fun bar() { val r = foo<E>() } E类 fun foo():B{ return E()//您可以将泛型函数视为函数的cookie切割器。对于B的任何值,您的泛型函数定义都可以删除不同的函数cookie 有一个B的值可以使返回E()合法。那就是B是E,这也是调用foo()时的情况。但

Misc.kts包含:

class E
fun <B> foo(): B {
    return E() // <--- Error here
}
fun bar() {
    val r = foo<E>()
}
E类
fun foo():B{

return E()//您可以将泛型函数视为函数的cookie切割器。对于
B
的任何值,您的泛型函数定义都可以删除不同的函数cookie

有一个
B
的值可以使
返回E()
合法。那就是
B
E
,这也是调用
foo()
时的情况。但是,这是唯一的情况。如果我调用
foo()
,会发生什么?当需要
Int
时,您不能返回
E()

要使函数定义有效,仅存在一个与
B
兼容的返回值是不够的。您的返回值必须与
B
的所有可能值兼容