美文网首页
Vert @DataObject 在Kotlin中的使用

Vert @DataObject 在Kotlin中的使用

作者: Gascognya | 来源:发表于2022-01-01 15:31 被阅读0次

首先DataObject不适合在DataClass上使用,因为其必须提供序列化和反序列化的特点导致的。
但我们可以采用委托类,将类的数据委托到一个jsonObject上,这样能很方便的序列化以及反序列化。在vert.x中,这样也会减少很多不必要的转换。

abstract class JsonClass(protected val base: JsonObject) {
    fun toJson(): JsonObject = base

    protected operator fun <V> set(p: KProperty<V>, v: V){
        base.put(p.name, v)
    }

    protected operator fun set(key: String, v: Any?){
        base.put(key, v)
    }

    protected operator fun <V> JsonObject.setValue(jsonClass: JsonClass, property: KProperty<*>, any: V) {
        put(property.name, any)
    }

    protected operator fun <V> JsonObject.getValue(jsonClass: JsonClass, property: KProperty<*>): V {
        return get(property.name) as V
    }
}

建个基类,所有model继承于它。将toJson放到基类中,顺便给JsonObject类加一对委托方法。提供两个赋值的方法。第一个是通过属性来赋值,是类型安全的,可以避免输入字符串。

@DataObject
class Test(json: JsonObject = JsonObject()): JsonClass(json){
    var name: String by base

    constructor(name: String) : this(){
        set(::name, name)
    }
}

相关文章

网友评论

      本文标题:Vert @DataObject 在Kotlin中的使用

      本文链接:https://www.haomeiwen.com/subject/hvgoqrtx.html