像下面这样吗?
val retro: Retro by lazy {
PilotApp.retro!!
}
class PilotApp : Application() {
companion object {
var retro: Retro? = null
}
override fun onCreate() {
retro = Retro(applicationContext)
super.onCreate()
}
}这是一种好的初始化方式吗?提前谢谢。
发布于 2018-08-31 23:45:46
这不是遵循“控制反转”的规则,也不是一个好主意。
它不是一个好主意的原因是,每当一个类(如ViewModel、片段或活动或...)要使用retro,他们必须通过调用您的第一行(PilotApp.retro)来自己获取Retro对象。
另一种方法(称为依赖注入/依赖反转)是在初始化时将Retro对象提供给类(同样是ViewModel或其他任何对象)。
这很重要的原因是因为使用第二种方法,您可以使使用Retro的类可测试。您可以为他们提供执行您想要的功能的RetroMock或TestRetro (例如,模拟一个api以返回错误)。
对于您的示例,另一个注意事项是,您不需要使该变量可为空,您应该将您的变量设置为lateinit并使其为非空。
https://stackoverflow.com/questions/52118798
复制相似问题