android - 在 Kotlin 中初始化 SharedPreference 的正确方法
问题描述
我对 Kotlin 很陌生。以前,我曾经在活动中声明一个 SharedPreference,如下所示:
class MainActivity extends AppCompatActivity {
SharedPreferences main;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
main = getSharedPreferences("main", MODE_PRIVATE);
}
}
这使我可以在main
整个课程中使用该实例。我想实现类似的功能。我目前lateinit var
这样使用:
class MainActivityKotlin : AppCompatActivity() {
lateinit var main : SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
main = getSharedPreferences("main", Context.MODE_PRIVATE)
}
}
但我不确定这是否是正确的做法。这也是一个var
. 据我了解,val
通常建议在实例不会更改的情况下使用 a (就像在这种情况下,main
一旦初始化就不会更改)。那么这种方法正确吗?
解决方案
使用lateinit
完全没问题。毕竟,它是为此目的而存在的。
不过,您可以使用一个稍微干净的解决方案:lazy-init:
val main by lazy { getSharedPreferences("main", Context.MODE_PRIVATE) }
getSharedPreferences()
这仅在首次引用时调用main
,然后存储该实例。它类似于 Java 中的处理方式,但您不需要拆分行。
推荐阅读
- django - 如何在 django-orm annotate 中求和排名
- mysql - 记录锁、间隙锁、Next-key 锁、Insert Intention Locks 和 AUTO-INC Locks 是 Intention Locks 的一部分吗?
- flutter - 如何从一个类屏幕获取值到另一个类并在颤动中填充这些值?
- java - Spring Cloud Gateway Kubernetes Eureka java.net.UnknownHostException:解析失败
- python - 当我尝试在 anaconda 中激活 drakflow-env 时,出现此错误
- mysql - 如果字符串仅由英文字母组成,如何检查 MySQL?
- android - 适配器中的搜索过滤器在 popBackStack 之后不起作用
- .net-5 - 如何从 Microsoft.Graph.Auth 替换 InteractiveAuthenticationProvider
- node.js - 如何使用 Nodejs 和 MongoDB 进行登录?
- linux - 如何摆脱充气/放气错误?