喜欢下面吗?
val retro: Retro by lazy {
PilotApp.retro!!
}
class PilotApp : Application() {
companion object {
var retro: Retro? = null
}
override fun onCreate() {
retro = Retro(applicationContext)
super.onCreate()
}
}
这是初始化的好方法吗?预先感谢。
答案 0 :(得分:0)
这不遵循“控制反转”的规则,也不是一个好主意。
这不是一个好主意的原因是因为每当一个类(例如ViewModel,Fragment或Activity或...)想要使用retro
时,他们都必须通过调用您自己的Retro对象来获取第一行(PilotApp.retro
)。
另一种选择(称为依赖注入/依赖倒置)是将Retro对象在初始化时提供给类(同样是ViewModel或其他)。
之所以如此重要,是因为通过第二种方法,您可以使使用Retro的类可测试。您可以给他们RetroMock或TestRetro来实现您想要的功能(例如,模拟api以返回错误)。
该示例的另一个说明,您不需要使Retro可以为空,您应该将var设为lateinit
并使其不为空。