In my mind, Kotlin is null safe.
The Code A is from the project Universal Android Music Player Sample, you can see here
It seems that val rootMediaId: LiveData<String>
is not null safe in Code A, a null string can be assigned to rootMediaId
, I don't know why Android Studio can compile these code, could you tell me?
I think that the Code B is reputable code.
Code 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
}
}
...
}
Code B
class MainActivityViewModel(
private val musicServiceConnection: MusicServiceConnection
) : ViewModel() {
val rootMediaId: LiveData<String?> =
Transformations.map(musicServiceConnection.isConnected) { isConnected ->
if (isConnected) {
musicServiceConnection.rootMediaId
} else {
null
}
}
...
}