gpt4 book ai didi

kotlin - LiveData null 在 Kotlin 中安全吗?为什么Android Studio可以编译呢?

转载 作者:行者123 更新时间:2023-12-02 07:28:33 24 4
gpt4 key购买 nike

在我看来,Kotlin 是空安全的。

代码A来自项目Universal Android Music Player Sample,你可以看到here

看来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
}
}
...
}

最佳答案

因为Live Data是用Java编写的,所以Kotlin在这里使用平台类型。您可以阅读更多相关信息here 。简而言之:Java 类型不包含可空性信息,因此 Kolin 无法推断出正确的类型。 Java 中的 String 可以是 Kotlin 中的 StringString?。 Android studio将此类String类型标记为String!,方便大家关注并自行设置合适的类型。

关于kotlin - LiveData null 在 Kotlin 中安全吗?为什么Android Studio可以编译呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62017037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com