很高级的用法,但是kotlin委托看的脑袋嗡嗡的😭
Closed this issue · 4 comments
ztoString commented
嗡嗡嗡~
ztoString commented
麻烦问下,封装了mmkvInt这样的无参函数,最终保存的<key,value>的key是怎么传进去的呀,刚接触kotlin不久,确实不是很明白😭
DylanCaiCoding commented
key 值用的是属性名
Leelion96 commented
key 值用的是属性名
想问下,这样用属性名作为key值,最终会收混淆影响吗?
DylanCaiCoding commented
想问下,这样用属性名作为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")
}