美文网首页
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