android - 具有不同类型数据的可变列表
问题描述
我有一个可变列表,其中可以包含不同数据类的项目。例如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
但我得到了类转换异常,因为在我的列表中还有其他类型的项目。
解决方案
@aswi 我们可以通过使用when
with is
check 来实现这一点,请参考下面的代码示例:
// 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")
}
}
}
推荐阅读
- next.js - 在 Nextjs 中获取嵌套组件的数据
- migration - 我想将 Windows 2008 r2 的用户列表迁移到 Windows 2016
- java - java - 如何在Java中返回所有带有名称+字段的枚举实例?
- javascript - 将字符集从非标准字符集转换为 UTF-8
- facebook - Facebook 发送坏了
- postgresql - 在 Mac Big Sur 11.,2.3 上正确安装 PostgreSQL 时遇到问题
- php - 如何交换 Woocommerce 个人资料照片和 WP 用户头像
- java - 使用Java从excel电子表格中获取字体大小
- python-3.x - 如何使用 PyQt5 在 ui 上添加子图
- azure-pipelines - Azure DevOps 管道 VS 测试失败。所有这些单元测试都在本地通过