У меня есть некоторые сомнения по поводу того, как этого добиться, потому что я использую автоматическое вещание.
Примечание: тот факт, что тип может быть выведен из контекста без явного указания егов Котлине называется Smart Cast (не автоматически).
Учитывая, что buildMenuItem
и buildItem
возвращают Item
, вы можете сделать следующее:
private fun buildItemsList(navMenu: NavMenu?, appName: String) = navMenu?.items?.map { item ->
when (item) {
is NavMenu -> buildMenuItem(item, appName)
is NavLink -> buildItem(item, appName)
else -> throw IllegalStateException("Unknown subtype ${item::class.simpleName} of NavMenu")
}
} ?: emptyList()
Предполагаемый тип возврата будет List<Item>
.Если вам нужен изменяемый список, добавьте вызов toMutableList()
.
Если вам нужно отфильтровать типы отдельно, используйте filterIsInstance
- хорошая идея.
Использование:
val l = listOf(1, 2, "Hello").filterIsInstance<String>()
l будет иметь тип List<String>
.