【问题标题】: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)
    }
    }
    

    【讨论】:

    • 完美运行。谢谢
    猜你喜欢
    • 2016-03-09
    • 2021-01-05
    • 2019-02-26
    • 1970-01-01
    • 2019-09-18
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多