kotlin 中传一整个数组过去,结果报crash,看了一下是定义了一个方法
fun getString(context: Context, id: Int, vararg params: Any): String{
//......
return context.createConfigurationContext(configuration).resources.getString(id, params)
}
这样的传法会让params被识别为一个整体,而不是单个元素,需要在params前面加一个*
关于* 号在kotlin中的用法有几种,这里补充一下遗漏的知识,查漏补缺
-
作为乘法运算符:
*用于数学运算中的乘法,例如2 * 3结果为6。 -
展开操作符(Spread Operator):
*用于将数组或可变参数(vararg)展开成单个元素,常用于函数调用。- 例如,如果有一个整型数组
intArrayOf(1, 2, 3),可以使用foo(*intArrayOf(1, 2, 3))将数组元素作为单独的参数传递给函数foo,相当于foo(1, 2, 3)。 - 如果函数定义为
fun foo(vararg args: Int),则*运算符可以用来将一个IntArray传递给args。
- 例如,如果有一个整型数组
-
类型声明中的泛型通配符:
*也可以用作类型参数的泛型通配符,表示“任何类型”。在某些泛型相关的场景下,例如在需要使用泛型类型但是又不想指定具体类型时,可以使用*。