重新实现Application单例化
在这个情景下,委托就可以帮助我们了。我们直到我们的单例不会是null,但是我们不能使用构造函数去初始化属性。所以我们可以使用notNull委托:
1. class App : Application() {
2. companion object {
3. var instance: App by Delegates.notNull()
4. }
6. override fun onCreate() {
7. super.onCreate()
8. instance = this
9. }
10. }
这种情况下有个问题,我们可以在app的任何地方去修改这个值,因为如果我们使用Delegates.notNull(),属性必须是var的。但是我们可以使用刚刚创建的委托,这样可以多一点保护。我们只能修改这个值一次:
1. companion object {
2. var instance: App by DelegatesExt.notNullSingleValue()
3. }
尽管,在这个例子中,使用单例可能是最简单的方法,但是我想用代码的形式展示给你怎么去创建一个自定义的委托。
