我有以下单位功能:
private fun loadFilterArea() {
val query = ALIAS.AREA
val type = preferences.getInt(query, TYPEVALUES.MY_LOCATION)
val longitude: Double
val latitude: Double
when (type) {
TYPEVALUES.MY_LOCATION -> {
...
longitude = point.longitude
latitude = point.latitude
...
}
TYPEVALUES.CUSTOM_RADIUS -> {
...
longitude = point.longitude
latitude = point.latitude
...
}
TYPEVALUES.INPUT -> {
...
longitude = preferences.getFloat(ALIAS.AREA_LONGITUDE, 0f).toDouble()
latitude = preferences.getFloat(ALIAS.AREA_LATITUDE, 0f) .toDouble()
...
} else -> {
...
}
}
//... the question is here ...
//... can't be compiled cause val's are not initialized
if (longitude != null && latitude != null) {
storeKey(ALIAS.AREA_LONGITUDE, longitude)
storeKey(ALIAS.AREA_LATITUDE, latitude)
}
}
那么,如何检查经度和纬度值是否已初始化?
我不想将它们从函数移动到全局范围,并使用它们作为lateinit进一步使用:: latitude.isInitialized,看起来我的Kotlin版本不支持本地lateinit变量
答案 0 :(得分:3)
如果为您的用例提供纬度和经度的null
值是有意义的,那么您可以将这些变量定义为可空Double
,例如var latitude: Double? = null
(longitude
相同{1}})。在那之后,检查它们是否不是null
是有意义的,但变量不再是不可变的。
为了保持不变性,你可以做类似的事情:
val longitude: Double?
val latitude: Double?
when (type) {
TYPEVALUES.MY_LOCATION -> {
longitude = ...
latitude = ...
...
}
TYPEVALUES.CUSTOM_RADIUS -> {
longitude = ...
latitude = ...
...
}
TYPEVALUES.INPUT -> {
...
} else -> {
latitude = null
longitude = null
}
}
否则,如果您希望它们不可为空,那么您需要在null
语句的所有分支中提供有意义的非when
值。
答案 1 :(得分:1)
您可以使用何时直接存储值的功能,以便声明和分配同时完成:
{{1}}