DylanCaiCoding/MMKV-KTX

很高级的用法,但是kotlin委托看的脑袋嗡嗡的😭

Closed this issue · 4 comments

嗡~

麻烦问下,封装了mmkvInt这样的无参函数,最终保存的<key,value>的key是怎么传进去的呀,刚接触kotlin不久,确实不是很明白😭

key 值用的是属性名

key 值用的是属性名

想问下,这样用属性名作为key值,最终会收混淆影响吗?

想问下,这样用属性名作为key值,最终会收混淆影响吗?

这是个好问题,结论是不会受到混淆的影响。你把 Kotlin 代码转为 Java 代码会发现,用属性委托的时候 Kotlin 帮我们生成创建 KProperty 对象的代码,然后通过该对象拿到属性名。比如:

static final KProperty[] $$delegatedProperties = new KProperty[]{(KProperty)Reflection.mutableProperty1(new MutablePropertyReference1Impl(MainActivity.class, "username", "getUsername()Ljava/lang/String;", 0))};

这里的属性名是硬编码了一个字符串,混淆不会修改这个字符串的内容。

如果是多人协作开发,可能会和别人写的重名了,重名的话内容会被覆盖,这就建议重写 kv 属性来创建该模块的 MMKV 实例。

object DataRepository : MMKVOwner {
  // ...

  override val kv = MMKV.mmkvWithID("module name")
}