Почему этот код Kotlin с генериками приводит к ошибке компиляции несоответствия типов? - PullRequest
0 голосов
/ 18 мая 2019

Misc.kts содержит:

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

Ошибка Type mismatch: inferred type is Misc.E, but B was expected. Такое поведение компилятора меня удивляет. Буду благодарен за объяснение.

1 Ответ

6 голосов
/ 19 мая 2019

Вы можете думать об общих функциях как обрезки печенья для функций.Для любого значения B определение общей функции может исключить другой файл cookie функции.

Существует одно значение B, которое может сделать return E() допустимым.Именно тогда B равно E, что также имеет место в вызове foo<E>().Однако это только такой случай.Что произойдет, если я позвоню foo<Int>()?Вы не можете вернуть E(), когда ожидается Int.

Чтобы определение вашей функции было действительным, недостаточно просто существовать одно возвращаемое значение, которое совместимо с B.Возвращаемое значение должно быть совместимо с всеми возможными значениями B.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...