如何在 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)
}
}
如果我有这个 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)
}
}