使用动态键名的默认值并没有进行隔离?
codeZeng95 opened this issue · 9 comments
codeZeng95 commented
var sceneMusic: Boolean by serialLazy(true, name = "scene_music_${globalMac.toMac()}_${userInfoId}")
当我第一次改变他的值为false 接着 我改变 动态键名的 变量的值,这时候再去读取值,动态键名变量已经改了,这时候读取的不应该是默认值true吗?但是读取出来的 还是 上一个动态键名的 值 false
rayzeng0221 commented
var globalMac = ""
var userInfoId = ""
var sceneMusic: Boolean by serialLazy(true, name = "scene_music_${globalMac}_${userInfoId}")`
// 写入
binding.cardWriteField -> {
// name = "https://github.com/liangjingkanji/Serialize"
//toast("写入数据: $name 到磁盘")
globalMac = "C300000030A1"
userInfoId = "1647308209"
sceneMusic = false
Log.i("zy1997", "onClick: 写入之后的值是---${sceneMusic}")
}`
// 读取
binding.cardReadField -> {
//toast("读取本地数据为: $name")
globalMac = "CE3431345450"
//userInfoId = "1647308209"
//sceneMusic = false
Log.i("zy1997", "onClick: 写入之后的值是---${sceneMusic}")
}
rayzeng0221 commented
上面这段代码 是我 直接在你的Demo里面复现 的 也是一样
rayzeng0221 commented
liangjingkanji commented
原因: serialLazy
对值进行缓存了
- 我猜测你可能想隔绝某个类的所有字段, 实际上本框架现在支持
Serialize.hook
拦截配置和序列化, 示例文档 - 关于
by serialLazy
默认值没有隔绝的问题你可以暂时换成by serial
来解决, 其并不会缓存数据, 该问题我会马上开始进行修复(但我工作繁忙)
同时我建议迁移使用自定义序列化来存储数据, 因为默认Serialize/Parcelable
等方式无法很好的兼容字段变更
rayzeng0221 commented
没用哦,早上已经试过了,都是一样的 。
var sceneMusic: Boolean by serial(true, name = "scene_music_${globalMac}_${userInfoId}")
liangjingkanji commented
使用的最新版本吗?
rayzeng0221 commented
使用的最新版本吗?
是啊,而且我还是直接在你的 Demo里面改的
liangjingkanji commented
rayzeng0221 commented