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

时间:2018-11-01 09:49:43

标签: android kotlin

我有一个从意图中提取数据的例子

val screen = intent.getParcelableExtra<Screen>("screen")

我收到的结果是一个不可为空的变量,但它可以为空,因为我不知道该包裹是否已添加到附加项目中。为什么Kotlin不返回可为空的类型?

2 个答案:

答案 0 :(得分:2)

Kotlin只是调用getParcelableExtra(),正如在Java的android SDK中定义的那样。此方法未使用@Nullable进行注释,因此kotlin不知道它可能返回null。

另请参见nullability annotations

  

可空性注释
  具有可空性注释的Java类型   不是以平台类型表示,而是以实际可为空或   非null Kotlin类型。编译器支持以下几种   可空性注释,包括:

     
      
  • JetBrains(来自org.jetbrains.annotations的@Nullable和@NotNull   包)
  •   
  • Android(com.android.annotations和android.support.annotations)
  •   

答案 1 :(得分:0)

在代码中

val screen = intent.getParcelableExtra<Screen>("screen")

screen的推断类型将为Screen!。感叹号表示这是一个 platform类型,这意味着它可以为空或可以为空,但是编译器不会强制执行空检查行为。

了解更多:Null Safety and Platform Types

但是,如果您积极希望Kotlin强制执行null安全性,则可以明确指定类型:

val screen: Screen? = intent.getParcelableExtra<Screen>("screen")

通过显式指定类型,Kotlin将为您提供您习惯的所有编译时null安全性。