为什么可以在Kotlin中为val变量分配数据



以下代码来自项目播放计费示例。

private val repository就是val,为什么repository = BillingRepository.getInstance(application)能正常工作?

在我看来,val必须在定义时初始化,例如private val repository: BillingRepository by lazy {BillingRepository.getInstance(application)}

代码

class BillingViewModel(application: Application) : AndroidViewModel(application) {
val gasTankLiveData: LiveData<GasTank>
val premiumCarLiveData: LiveData<PremiumCar>
val goldStatusLiveData: LiveData<GoldStatus>
val subsSkuDetailsListLiveData: LiveData<List<AugmentedSkuDetails>>
val inappSkuDetailsListLiveData: LiveData<List<AugmentedSkuDetails>>
private val LOG_TAG = "BillingViewModel"
private val viewModelScope = CoroutineScope(Job() + Dispatchers.Main)
private val repository: BillingRepository
init {
repository = BillingRepository.getInstance(application)
repository.startDataSourceConnections()
gasTankLiveData = repository.gasTankLiveData
premiumCarLiveData = repository.premiumCarLiveData
goldStatusLiveData = repository.goldStatusLiveData
subsSkuDetailsListLiveData = repository.subsSkuDetailsListLiveData
inappSkuDetailsListLiveData = repository.inappSkuDetailsListLiveData
}
...
}

为了初始化val变量,声明行、任何初始化器块(init { ... }块(和构造函数等效于在定义点进行初始化,因为它们都是在对象被认为正确构造之前运行的。

在声明、所有初始化器块和构造函数的组合中,任何val变量都必须初始化一次。

最新更新