作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在 Android 上,我想将我的应用程序类设为 singleton .
制作成这样:
object MyApplication: Application(){}
行不通。运行时抛出以下错误:
java.lang.IllegalAccessException: private com....is not accessible from class android.app.Instrumentation.
这样做也是不可能的:
class MyApp: Application() {
private val instance_: MyApp
init{
instance_ = this
}
override fun onCreate() {
super.onCreate()
if (BuildConfig.DEBUG) {
Timber.plant(Timber.DebugTree());
}
}
companion object{
fun getInstance() = instance_
}
}
如何在我的应用程序的任何地方获取我的应用程序类的实例?我想使用 MyApp.instance()
而不是 (applicationContext as MyApp)
。
还有我想要这个的解释:我的应用程序中有类(class)。例如,一个用上下文初始化的 SharedPreference Singleton,由于它是一个单例,它不能有参数。
最佳答案
您可以执行与 Java 相同的操作,即将 Application
实例放在静态字段中。 Kotlin 没有静态字段,但对象中的属性可以静态访问。
class MyApp: Application() {
override fun onCreate() {
super.onCreate()
instance = this
}
companion object {
lateinit var instance: MyApp
private set
}
}
然后您可以通过 MyApp.instance
访问该属性。
关于android - Kotlin 单例应用程序类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37391221/
我是一名优秀的程序员,十分优秀!