为了提高对SharedPreferences.Editor的调用的可读性,我想使用一个Kotlin变量,每当我需要一个新的SharedPreferences.Editor时,它将执行’getSharedPreferences.edit()’.最初我打算使用这样的东西:
val editPreferences: SharedPreferences.Editor = Application.getSharedPreferences("preferences",Context.MODE_PRIVATE).edit()
但后来我被告知,’editPreferences’将保留对同一编辑器的引用,当我每次调用’editPreferences’时我真正希望它创建一个新的编辑器.
如果使用自定义getter,每次都会返回一个新的编辑器吗?像这样的东西:
val editPreferences: SharedPreferences.Editor get() = Application.getSharedPreferences("preferences",Context.MODE_PRIVATE).edit()
仍在使用Kotlin并且不确定get()方法是否会引用编辑器而不是创建新的编辑器.
解决方法
第二个属性声明适合您的需要:它有一个
custom getter,因此获取属性值将始终执行getter,并且不存储该值(该属性没有
backing field).
你可能会被等号get()= …弄糊涂,但对于等效的getter形式它只是一个single-expression shorthand:
val editPreferences: SharedPreferences.Editor get() { return Application .getSharedPreferences("preferences",Context.MODE_PRIVATE) .edit() }