簡體   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