6.3.4 泛型的应用

1.如何在RxCache使用时规避范型擦除

RxCache地址:https://github.com/fengzhizi715/RxCache。

RxCache是一款支持Java和Android的Local Cache,目前支持内存、堆外内存、磁盘缓存。RxCache在使用DiskImpl时,需要持久化对象,此时会对对象进行序列化和反序列化。如果保存的对象是List<T>类型的,就必须声明其Type:

使用Kotlin来解决的话非常简单:

    inline fun <reified T> RxCache.load2Observable(key: String):
Observable<Record<T>> = load2Observable<T>(key, object : TypeToken<T>() {}.type)

可以省去声明Type:

     val observable = rxCache.load2Observable<List<User>>("list")

2.kvalidation——基于Kotlin实现的验证框架

kvalidation地址:https://github.com/fengzhizi715/kvalidation。

kvalidation支持对象的验证以及对象属性的验证,支持DSL风格,支持RxJava。

以对象的验证为例,kvalidation定义一个ValidateRule接口表示类的验证规则,它使用了逆变。ValidateRule包含两个方法:

真正的类的验证是在Validator的validate()中进行的,当所有的ValidateRule都通过时,才算真正的验证通过。任何一个ValidateRule验证失败,都会导致类的验证失败。

有关kvalidation的使用详见该库的GitHub地址。