android - 如何在 Kotlin 多态序列化中获取类类型?
问题描述
如果我有这个类层次结构:
@Serializable
abstract class AA
@Serializable
@SerialName("type_1")
data class A(
val fieldA: String
) : AA()
@Serializable
@SerialName("type_2")
data class B{
val fieldB: Boolean
} : AA()
当我有一个 AA 类的列表时,我怎样才能得到每个类的类型?(type_1 或 type_2)例如:
val k: List<AA>
for(j in k) {
j.type ??
}
解决方案
您可以使用反射 APIgetAnnotation
来获取价值。它是这样的。
abstract class AA
@SerialName("type_1")
data class A(
val fieldA: String
) : AA()
@SerialName("type_2")
data class B(val fieldB: Boolean) : AA()
fun main(args: Array<String>) {
val list = arrayListOf<AA>().apply {
add(A("class A"))
add(B(true))
}
for (j in list) {
val serial = j.javaClass.getAnnotation(SerialName::class.java)
println(serial.value)
}
}
推荐阅读
- firebase - Flutter/Firestore - 不显示新添加/更改的数据
- dynamic-data - ReactiveUI - 如何使用 SourceCache 和 ReactiveRecyclerViewAdapter (DynamicData)
- flutter - 你如何组合颜色,就好像一种被涂在另一种上一样?
- github - 你如何判断 Github 上合并的 PR 是否已发布?
- java - 在android中使用“if”条件语句进行代码窃听
- file-upload - 将文件发布到弹簧控制器时,当前请求不是多部分的
- mysql - 需要帮助编写组合两个表的 SQL SELECT 语句
- android - 填充 ListView 很慢,Fragment 加载不顺畅
- arrays - 将数组元素转换为哈希 ruby
- c - 在结构内部定义结构指针