![](/img/trans.png)
[英]intent.getParcelableExtra (NfcAdapter.EXTRA_TAG) return null
[英]Why intent.getParcelableExtra don't return nullable type in kotlin?
我有一个从意图中提取数据的例子
val screen = intent.getParcelableExtra<Screen>("screen")
我收到的结果是一个不可为空的变量,但它可以为空,因为我不知道该 Parcelable 是否已添加到附加项中。 为什么 kotlin 不返回可空类型?
Kotlin 只是调用getParcelableExtra()
因为它在 java 的 android SDK 中定义。 此方法未使用@Nullable
注释,因此 kotlin 不知道它可能返回 null。
另请参阅可空性注释:
可空性注释
具有可空性注释的 Java 类型不表示为平台类型,而是表示为实际的可空或非空 Kotlin 类型。 编译器支持多种可空性注释,包括:
- JetBrains(来自 org.jetbrains.annotations 包的 @Nullable 和 @NotNull)
- Android(com.android.annotations 和 android.support.annotations)
在代码中
val screen = intent.getParcelableExtra<Screen>("screen")
推断的screen
类型将是Screen!
. 感叹号表示这是一个平台类型,这意味着它可能是也可能不是可为空的,但编译器不会强制执行空检查行为。
阅读更多: 空安全和平台类型
但是,如果您积极希望 Kotlin 强制执行空安全,则可以明确指定类型:
val screen: Screen? = intent.getParcelableExtra<Screen>("screen")
通过显式指定类型,Kotlin 将为您提供您习惯的所有编译时空值安全性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.