繁体   English   中英

从 Kotlin 将 null 传递给不可为空的 Java 方法

[英]Pass null to non-nullable Java method from Kotlin

假设有声明为@NonNullApi的 Java 库,但它的某些方法实际上可能会消耗null参数。

有没有办法忽略不可空性要求并从null那里通过 null?

UPD需要澄清:方法被 3rd 方库声明为不可为空,无法更改其代码。 目标是打破呼叫方的限制。

明显的方法是使用反射,但也许 Kotlin 只提供语法?

一个明显的非答案:不要那样做!

该 API 文档说:不要以这种方式发送null

即使今天的实现并没有因为传入null而对您不利,谁说这不是错误,并且不会在该库的某些即将发布的版本中得到修复?

换句话说:编写代码以匹配指定的 API。

当库实现比 API 规范更慷慨时,请遵循更严格的规则。 您甚至应该考虑为该库编写一份报告。

正如此处的另一个答案所指出的,最好不要克服用可空性注释表示的 Java function 的可空性合同。

但是,如果您真的认为这些注释是错误的,您可以使用以下解决方法:

  • Declare a helper static function in an utility Java class beside your Kotlin code. 这个 function 在您需要传递null的那些参数上没有NonNull注释,它只是将它们转发到有问题的方法。 即使可空性注释不匹配,Java 编译器也不会阻止调用该方法。
  • 将 static 助手 function 导入到 Kotlin 并从那里调用它。

暂无
暂无

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

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