繁体   English   中英

为什么可以将 java 可空返回值分配给 Kotlin 非可空变量?

[英]Why can a java nullable returned value be assigned to a Kotlin Non-Nullable variable?

我很惊讶以下代码被编译:

lateinit var progressBar: ProgressBar

onCreate

progressBar = view.findViewById(R.id.pb_loader)

findViewById声明它可以返回null ,那么编译器如何不强制我声明:

lateinit var progressBar: ProgressBar?

有人可以帮助我了解编译器何时执行以及何时不执行吗?

View.findViewById是 Java function。 Kotlin 编译器无法确定它是否可以返回可空值,因为对于 Java 仅存在可空类型(即使它们在运行时可能永远不会是 null)。

为了文档(和互操作性)而引入了注释。 Kotlin 编译器可以使用其中一些来确定正确的类型。

但是如果编译器无法确定类型是否被视为平台类型,这意味着您作为开发人员必须在调用站点决定返回的值是否可能是null

文档

Java 中的任何引用都可能是 null,这使得 Kotlin 对来自 Java 的对象的严格空值安全要求不切实际。 Java 声明的类型在 Kotlin 中被特殊处理并称为平台类型。 对此类类型放宽空检查,因此对它们的安全保证与 Java 中的相同

所以,是的,这是预期的行为。 如果 Kotlin 来自 Java API,则不会检查可空性,除非您在方法上添加可空性注释 findViewById不幸的是没有这样的注释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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