首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当传递给varargs参数时,Kotlin能过滤出null参数吗?

在 Kotlin 中,当将参数传递给 varargs 参数时,默认情况下是无法过滤出 null 参数的。varargs 参数实际上被编译为数组,而数组在 Kotlin 中是不允许包含 null 值的。因此,如果你将 null 值传递给 varargs 参数,编译器会在编译时产生一个警告,但不会过滤掉这个 null 值。

然而,你可以使用 Kotlin 的可变长度参数限定符 spread operator (*) 来实现过滤 null 参数的效果。通过在传递参数前添加 *,可以将一个数组解构为一个可变长度的参数序列,并且在解构过程中会过滤掉数组中的 null 值。

下面是一个示例代码:

代码语言:txt
复制
fun printParams(vararg params: String?) {
    params.filterNotNull().forEach { println(it) }
}

fun main() {
    val param1 = "Hello"
    val param2 = null
    val param3 = "World"

    printParams(*arrayOf(param1, param2, param3))
}

在上述示例中,我们定义了一个 printParams 函数来打印参数。在 printParams 函数中,我们使用了 filterNotNull() 函数来过滤掉参数中的 null 值。然后,我们使用 forEach 循环打印过滤后的参数。

main 函数中,我们创建了一个包含 null 值的参数数组,并将其传递给 printParams 函数。在传递参数之前,我们使用了 * 可变长度参数限定符来解构数组,并在解构过程中过滤掉 null 值。

这样,只有非空参数 "Hello" 和 "World" 会被打印出来。

腾讯云相关产品和产品介绍链接地址:

  • 云开发(CloudBase):提供全栈云开发能力,支持前后端一体化开发,无需搭建服务器,具备高可用、低成本、易扩展等优势。详细介绍请参考腾讯云云开发
  • 云函数(SCF):事件驱动的无服务器计算服务,可实现函数的编写、部署和运行,无需关注服务器运维。详细介绍请参考腾讯云云函数(SCF)
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Kotlin方法与Lambda表达式

单表达式方法 方法返回单个表达式,可以省略花括号并且在 = 符号之后指定代码体即可: fun double(x: Int): Int = x * 2 返回值类型可由编译器推断,显式声明返回类型是可选的...: fun double(x: Int) = x * 2 方法参数 默认参数 具名参数 可变数量的参数 默认参数 方法参数可以有默认值,省略相应的参数使用默认值。...() for (char in str) { result.append(char) } return result.toString() } 允许将可变数量的参数递给方法...,或者,如果参数具有方法类型,则通过在括号外部一个 lambda。...当我们调用 vararg 方法,我们可以一个接一个地参,例如 append('h', 'e', 'l', 'l', 'o'),或者,如果我们已经有一个数组并希望将其内容传给该方法,我们使用伸展(spread

12910

Java 中 Varargs 机制的理解

J2SE 1.5提供了“Varargs”机制。借助这一机制,可以定义和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。...这种做法可以有效的达到“让方法可以接受个数可变的参数”的目的,只是调用时的形式不够简单。 J2SE 1.5中提供了Varargs机制,允许直接定义和多个实参相匹配的形参。...尽管在背地里,编译器会把匹配不确定个实参的形参,转化为数组形参;而且也可以用数组包了实参,再传递给实参个数可变的方法;但是,这并不表示“匹配不确定个实参的形参”和“数组形参”完全没有差异。...如果把一个和不确定个实参相匹配的形参的类型,用一个标识符来代表,那么编译器会给出一个“generic array creation”的错误。 清单11:Varargs遇上泛型 ?...在引入Varargs机制之后,这一原则仍然适用,只是要考虑的问题丰富了一些——传统上,一个重载方法的各个版本之中,只有形参数量与实参数量正 好一致的那些有被进一步考虑的资格。

73330

Python: C扩展初体验

后面的 &arg1, &arg2 就是通过参数解析提取的值,存放的地方,这有点类似 C 的 scanf; 很明显,这三个参数,在数量上存在这一定的联系,也就是,进去两个 int参数,那么就肯定是对应了两个...(METH_VARARGS), 还是其他等等; 第四个字段:方法描述,就是通过 help() 或者 doc 可以看到的; 需要注意的是,这个列表的最后必须以 {NULL, NULL, 0, NULL}...*/ }; 正因为存在这样的一份记录表,Python 才能够寻找到相应的函数 同样的,如果我们想要找一个模块的 Python 函数 对应什么的 C模块方法,也通过这地方比较粗暴得知,例如 Python...这个函数名不能像上面那样,这是有规定的,必须是 init + 模块名字,比方说,我的最后编译出来的文件是 test.so, 那我的函数名就是 inittest, 这样在 Python 导入 test 模块,...所以,在我们编写 C扩展 ,也需要时刻谨记这步. 主要会用到下面两个宏: 1. 增加引用: Py_INCREF 例: Py_INCREF(pObj1) 2.

1.2K21

Java中的可变参数_Effective Java 2.0_Item 2知识点

可变参数Varargs介绍 在JDK 1.5之前,要想在方法中使用可变参数,则必须通过数组(或其它集合)来实现,在这种情况下你需要将变量显式的定义在数组中,在使用时要从数组中取出变量。...而在JDK 1.5中,引入了可变参数Varargs),全称为variable number of arguments,常被称为variable arguments。...使用可变参数的注意事项 可变参数只有当参数数目不确定时才会使用。 参数中需要T[]作为参数,可以考虑使用可变参数。 可变参数只能用在参数列表中的最后一个位置,且方法中只能有一个可变参数。...尽量避免重载含有可变参数的方法。 可变参数输入时不能null值。 Arrays.asList()方法支持可变参数。...参考资料: 1、Effective Java 2.0 2、http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html 3、http

30550

Kotlin 1.2 的新增了哪些特性?

例如,一个 lambda 作为构造函数参数递给一个对象,后者可以用于引用另一个必须稍后定义的对象: lateinit修饰符现在可以用在顶级属性和局部变量上。...例如,当作为构造函数参数递给一个对象的 lambda 引用另一个对象,稍后必须定义的对象可以使用: ? 循环中的值:1, 2, 3, 1, 2, 3, 1, ......改进 smart cast 一个变量从一个安全调用表达式中被赋值并且被检查为 null ,smart cast 也被应用到安全调用接收器中: ?...不幸的是,构造函数调用的参数中存在这样的表达式,一些字节码处理工具不能很好地处理这些代码。...并不会)。 要返回到 1.2 之前的行为,请将 -Xno-exception-on-explicit-equals-for-boxed-null 标志传递给编译器。

2.8K10

Kotlin安卓开发学习(3)

规定,Lambda参数是函数最后一个参数,可以移动到括号外面: val maxLengthFruit = list.maxBy() { fruit: String -> fruit.length }...} Lambda表达式的参数列表中只有一个参数,也不必声明参数名,而是可以使用 it 关键字来代替: val maxLengthFruit = list.maxBy { it.length } map...有着严格的空指针检查,它在编译就会检查代码是否安全(会不会出现null),这当然会导致代码变得比较男鞋,但是Kotlin也提供了一系列辅助工具。...默认所有的参数和变量都是不可为空的,所有传入的study也不可能为空,传入null,会提示错误。...操作符,这个操作符的作用非常好理解,就是对象不为空正常调用相应的方法,对象为空则什么都不做。如: //简化前 if (a !

51510

Kotlin 1.2 的新增特性

例如,一个 lambda 作为构造函数参数递给一个对象,后者可以用于引用另一个必须稍后定义的对象: lateinit修饰符现在可以用在顶级属性和局部变量上。...例如,当作为构造函数参数递给一个对象的 lambda 引用另一个对象,稍后必须定义的对象可以使用: 循环中的值:1, 2, 3, 1, 2, 3, 1, ......弃用:数据类的覆写性拷贝 从已经具有相同签名的拷贝函数的类型派生数据类,为数据类生成的 copy 实现使用父类型的默认函数,会导致出现与预期相反的行为,如果父类型没有默认参数,则在运行时失败 导致复制冲突的继承已经被...不幸的是,构造函数调用的参数中存在这样的表达式,一些字节码处理工具不能很好地处理这些代码。...并不会)。 要返回到 1.2 之前的行为,请将 -Xno-exception-on-explicit-equals-for-boxed-null 标志传递给编译器。

2.8K70
领券