На мой взгляд, Kotlin является нулевым.
Код A взят из проекта Universal Android Musi c Player Sample, вы можете увидеть здесь
Кажется, что val rootMediaId: LiveData<String>
не является нулевым безопасным в коде A, нулевая строка может быть присвоена rootMediaId
, я не знаю, почему Android Studio может скомпилировать этот код, вы можете мне сказать?
Я считаю, что код B является авторитетным кодом.
Код A
viewModel.rootMediaId.observe(this,
Observer<String> { rootMediaId ->
if (rootMediaId != null) {
navigateToMediaItem(rootMediaId)
}
})
class MainActivityViewModel(
private val musicServiceConnection: MusicServiceConnection
) : ViewModel() {
val rootMediaId: LiveData<String> =
Transformations.map(musicServiceConnection.isConnected) { isConnected ->
if (isConnected) {
musicServiceConnection.rootMediaId
} else {
null
}
}
...
}
Код B
class MainActivityViewModel(
private val musicServiceConnection: MusicServiceConnection
) : ViewModel() {
val rootMediaId: LiveData<String?> =
Transformations.map(musicServiceConnection.isConnected) { isConnected ->
if (isConnected) {
musicServiceConnection.rootMediaId
} else {
null
}
}
...
}