繁体   English   中英

为什么intent.getParcelableExtra 在kotlin 中不返回可为空类型?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM