kotlin - Несоответствие типов: предполагаемый тип MutableList <TypeA>, но ожидался MutableList <InterfaceType> - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь кодировать некоторые вещи в kotlin, но у меня есть некоторые проблемы с этим. Как я могу решить эту проблему? Я поделился своим кодом .. Пожалуйста, помогите мне!

interface InterfaceType {}

open class ConcreteImpl: InterfaceType {}

class TypeA: ConcreteImpl() {}

fun test() {

    var interfaceTypeList: MutableList<InterfaceType> = mutableListOf()

    var typeAList: MutableList<TypeA> = mutableListOf()

    interfaceTypeList = typeAList

}

Вы можете показать код здесь.

1 Ответ

0 голосов
/ 10 апреля 2020

Это относится к Kotlin типам variance.

Тип MutableList<T> является инвариантным в его типе T, так что вы можете ' * присваивать MutableList<InterfaceType> MutableList<TypeA>.

Чтобы иметь возможность назначить его, поскольку InterfaceType является супертипом TypeA, вам потребуется класс ковариантный в его типе (например, List).

interface InterfaceType {}

open class ConcreteImpl: InterfaceType {}

class TypeA: ConcreteImpl() {}

fun test() {
    var interfaceTypeList: List<InterfaceType> = mutableListOf()
    var typeAList: MutableList<TypeA> = mutableListOf()
    interfaceTypeList = typeAList
}

В противном случае вы должны сделать неконтролируемое приведение к MutableList<InterfaceType>.

```kotlin
interface InterfaceType {}

open class ConcreteImpl: InterfaceType {}

class TypeA: ConcreteImpl() {}

fun test() {
    var interfaceTypeList: MutableList<InterfaceType> = mutableListOf()
    var typeAList: MutableList<TypeA> = mutableListOf()
    // Unchecked cast.
    interfaceTypeList = typeAList as MutableList<InterfaceType>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...