Kotlin vararg:如何将 null 设置为不抛出 NullPointerException 的 vararg?

Posted

技术标签:

【中文标题】Kotlin vararg:如何将 null 设置为不抛出 NullPointerException 的 vararg?【英文标题】:Kotlin vararg: how to set null to vararg that don't throw NullPointerException? 【发布时间】:2022-01-24 03:13:36 【问题描述】:

我的功能:

    fun func(vararg objects: Any?) 
    

当我调用func(null) 时,得到 Exception: Caused by: java.lang.NullPointerException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkNotNullParameter, 参数对象。 而我看到反编译java代码是这样的:

   public static final void func(@NotNull Object... objects) 
      Intrinsics.checkNotNullParameter(objects, "objects");
      printer.v(new Object[]objects);
   

有没有办法解决这个问题?

【问题讨论】:

kotlin 的 vararg 中不能有 null,this kotlinlang 上的帖子证实了这一点。 Note that vararg parameters are, as a rule, never nullable, because in Java there is no good way to distinguish between passing null as the entire vararg array versus passing null as a single element of a non-null vararg array. @Alex.T 这看起来像是对我的回答 :-) 我已将其添加为答案 【参考方案1】:

在 kotlin 的 vararg 中不能有 null,this post on kotlinlang 确认。

请注意,vararg 参数通常不能为空,因为在 Java 没有很好的方法来区分传递 null 作为 整个可变参数数组与将 null 作为 a 的单个元素传递 非空可变参数数组。

【讨论】:

以上是关于Kotlin vararg:如何将 null 设置为不抛出 NullPointerException 的 vararg?的主要内容,如果未能解决你的问题,请参考以下文章

Varargs Kotlin Java 互操作无法正常工作

Kotlin泛型 ② ( 可变参数 vararg 关键字与泛型结合使用 | 使用 [] 运算符获取指定可变参数对象 )

Kotlin:null 不能是非 null 类型的值

Kotlin学习笔记——接口抽象类泛型扩展集合操作符与Java互操作性单例

java语言中的varargs

无法在 Kotlin 中使用 jooq UpdateQuery 在数据库中将非字符串值设置为 null