【问题标题】:How to get class type in Kotlin Polymorphic Serialization?如何在 Kotlin 多态序列化中获取类类型?
【发布时间】:2021-08-21 05:27:06
【问题描述】:
如果我有这个类层次结构:
@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 ??
}
【问题讨论】:
标签:
android
kotlin
serialization
【解决方案1】:
您可以使用反射 API getAnnotation 来获取价值。是这样的。
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)
}
}