如何在 Kotlin 多态序列化中获取 class 类型?

How to get class type in Kotlin Polymorphic Serialization?

如果我有这个 class 层次结构:

@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 classes 的列表时,我怎样才能得到每个 class 的类型? (type_1 或 type_2) 例如:

val k: List<AA>
for(j in k) {
   j.type ??
} 

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