首页 > 解决方案 > 如何在 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 ??
} 

标签: androidkotlinserialization

解决方案


您可以使用反射 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)
}
}

推荐阅读