首页 > 解决方案 > 具有不同类型数据的可变列表

问题描述

我有一个可变列表,其中可以包含不同数据类的项目。例如val items: List<ItemData>, 和ItemData是一类

sealed class ItemData {
    data class itemOne(
            val valueOne
    ) : ItemData()

    data class itemTwo(
            val valueTwo
    ) : ItemData()

    data class itemThree(
            val valueThree
    ) : ItemData()
}

假设我想获取列表,并且只要项目属于某种类型,就在那里更新一些值。我的问题是,如何确保该项目正是我需要的类型?我试过了,item as ItemData.itemTwo但我得到了类转换异常,因为在我的列表中还有其他类型的项目。

标签: androidkotlin

解决方案


@aswi 我们可以通过使用whenwith ischeck 来实现这一点,请参考下面的代码示例:

// ItemData class
sealed class ItemData {
    data class ItemOne(
        val valueOne: Int
    ) : ItemData()

    data class ItemTwo(
        val valueTwo: String
    ) : ItemData()

    data class ItemThree(
        val valueThree: Boolean
    ) : ItemData()
}

这是类型检查的工作原理:

@JvmStatic
fun main(args: Array<String>) {

    val mixedList = listOf(
        ItemData.ItemOne(1), ItemData.ItemTwo("One"), ItemData.ItemThree(true)
    )
    mixedList.forEach { itemData ->
        when (itemData) {
             is ItemData.ItemOne -> println("This is ItemOne")
             is ItemData.ItemTwo -> println("This is ItemTwo")
             is ItemData.ItemThree -> println("This is ItemThree")
        }
    }
 }

推荐阅读