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?的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin泛型 ② ( 可变参数 vararg 关键字与泛型结合使用 | 使用 [] 运算符获取指定可变参数对象 )