向 mutableListOf<MyInterface>() 添加两种类型的对象
Adding two types of object to mutableListOf<MyInterface>()
interface ListItem {
val style: ItemStyle
val identifier: ListItemIdentifier?
}
val mutableList = mutableListOf<ListItem>()
我有一个映射到对象和组的列表:
dataList.groupBy { it.type }.forEach { (type, itemList) ->
val type = TypeHeader(name = type.name )
val items = itemList.map { item ->
Item(
title = item.title,
subtitle = item.subtitle
)
}
mutableList.addAll(listOf(type , items ))
}
我需要将该对象添加到我的 mutableList
但是当我尝试
mutableList.addAll(listOf(type , items ))
有错误
Type mismatch.
Required:
Collection<ListItem>
Found:
List<Any>
当我尝试将 listOf 转换为 ListItem 应用时崩溃
经过评论中的一些讨论,我们找到了解决方案。
问题出在 listOf()
行。您尝试混合 type
,它是单个项目和 items
,它是项目列表。 listOf()
不会神奇地将其扁平化为例如:[header, item, item, item]
。它会创建这样的东西:[header, [item, item, item]]
。这被推断为 Any
个对象的列表,因为有些项目是单个对象,有些是列表。
您可以将 header
和 items
合并为一个列表:
listOf(header) + items
但在这种情况下,最好只添加到 mutableList
两次:
mutableList.add(type)
mutableList.addAll(items)
interface ListItem {
val style: ItemStyle
val identifier: ListItemIdentifier?
}
val mutableList = mutableListOf<ListItem>()
我有一个映射到对象和组的列表:
dataList.groupBy { it.type }.forEach { (type, itemList) ->
val type = TypeHeader(name = type.name )
val items = itemList.map { item ->
Item(
title = item.title,
subtitle = item.subtitle
)
}
mutableList.addAll(listOf(type , items ))
}
我需要将该对象添加到我的 mutableList
但是当我尝试
mutableList.addAll(listOf(type , items ))
有错误
Type mismatch.
Required:
Collection<ListItem>
Found:
List<Any>
当我尝试将 listOf 转换为 ListItem 应用时崩溃
经过评论中的一些讨论,我们找到了解决方案。
问题出在 listOf()
行。您尝试混合 type
,它是单个项目和 items
,它是项目列表。 listOf()
不会神奇地将其扁平化为例如:[header, item, item, item]
。它会创建这样的东西:[header, [item, item, item]]
。这被推断为 Any
个对象的列表,因为有些项目是单个对象,有些是列表。
您可以将 header
和 items
合并为一个列表:
listOf(header) + items
但在这种情况下,最好只添加到 mutableList
两次:
mutableList.add(type)
mutableList.addAll(items)