向 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 个对象的列表,因为有些项目是单个对象,有些是列表。

您可以将 headeritems 合并为一个列表:

listOf(header) + items

但在这种情况下,最好只添加到 mutableList 两次:

mutableList.add(type)
mutableList.addAll(items)