区别

首先得分清楚它们的对应关系,kotlin中没有传统的数组(int[]),一切皆是对象

所以kotlin中只有ListArrayvarargs(可变长参数)三种

转换

List转Array

    fun a(){
        val list : List<String> = listOf("hello","world")
        //转换1
        b(arrayOf(list))
        //转换2
        b(list.toTypedArray())
    }

    fun b(array: Array<*>){
        //Array参数函数
    }

Array转List

    fun a(){
        val array : Array<String> = arrayOf("hello","world")
        //转换1
        b(listOf(array))
        //转换2
        b(array.toList() as List<*>)
    }

    fun b(list: List<*>){
        //List参数函数
    }

Array转varargs(可变长参数)

    fun a(){
        val array : Array<String> = arrayOf("hello","world")
        //转换
        b(*array)
    }

    fun b(vararg strings: String){
        //可变长参数函数
    }

这里用到的*叫做传播符号(spread operator),可以把Array转换成多个元素

varargs(可变长参数)转Array

    fun a(vararg strings: String){
        //无需转换
        b(strings)
    }

    fun b(array: Array<*>){
        //Array参数函数
    }

List转varargs(可变长参数)

    fun a(){
        val list : List<String> = listOf("hello","world")
        //转换
        b(*list.toTypedArray())
    }
    
    fun b(vararg strings: String){
        //可变长参数函数
    }

类似上面的,只是先要转换成Array,再用传播符转成varargs

varargs(可变长参数)转List

    fun a(vararg strings: String){
           //转换
        b(strings.toList())
    }

    fun b(list: List<*>){
        //List参数函数
    }