![](/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.