Vert @DataObject 在Kotlin中的使用

首先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)
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容