Почему я не могу использовать LiveData ребенка в качестве LiveData родителя?
Это что-то предназначенное для LiveData?
В java ответ довольно прост: универсальные типы в Java инвариантны, что означает, что List<String>
не является подтипом List<Object>
(цитируется по kotlin docs здесь )
Являются ли они какими-то возможными последствиями использования этого слова с kotlin 'as'
Kotlin просто делает предупреждение во время компиляции, но во время выполнения происходит то, что ваша проверка только против не-обобщенной части. Вот почему, я думаю (и если кто-то знает лучше меня, пожалуйста, объясните! Я сумасшедший об этом), вы можете сделать это в Kotlin.
Для лучшего объяснения того, что происходит в kotlin (а также в Java) при использовании типа дженериков, я рекомендую вам прочитать полные документы kotlin о дженериках здесь
Есть даже много статей о кастинге дженериков Java, таких как this one
EDIT:
Способ решения вашей проблемы может быть следующим:
объявлять единственные данные в реальном времени и обращаться с детьми простым образом, как это:
val liveParent = MutableLiveData<Parent>()
val childFirst = ChildFirst()
val childSecond = ChildSecond()
и затем верните правильного потомка в liveParent
при вызове returnCorrectChild()
fun returnCorrectChild() {
if (shouldManageFirstChild) {
liveParent.value = firstChild
} else {
liveParent.value = secondChild
}
}