Kotlin学习系列之:可变参数

x33g5p2x  于2022-03-08 转载在 其他  
字(1.0k)|赞(0)|评价(0)|浏览(614)

Kotlin中的可变参数

  • 回顾一下Java中的可变参数的使用:
public class VarArgsTest {

    public static void main(String[] args) {

        Test test = new Test();
        // 调用方式一
        System.out.println(test.sum(1, 2, 3, 4, 5));

        int[] arrays = {1, 2, 3, 4, 5};
        // 调用方式二
        System.out.println(test.sum(arrays));
    }
}

class Test {

    public int sum(int... args) {

        int sum = 0;

        for (int arg : args) {
            sum += arg;
        }

        return sum;
    }

}

注意点:

  • 可变参数本质上就是一个数组,如果某个方法中声明可变参数,那么我们既可以传递任意离散的参数值,也可以传递一个数组。
  • 可变参数必须要作为方法的最后一个参数
  • Kotlin中,语法格式就不一样了,它有自己的关键字vararg来表示可变参数,语法形式如下:
fun test(vararg args: String) {
    args.forEach {
        println(it)
    }
}

调用:

fun main(args: Array<String>) {
    test("a", "b", "c", "d")
}
  • 对比Java和Kotlin中的可变参数:

  • 至于第1条,你如果将args的.javaClass打印出来,发现它在字节码层面上还是一个数组,但是当我们调用带有可变参数的方法时,只能传递离散的参数值,直接传递数组会报语法错误。但是当我们手头上就是一个数组,要想传递,就需要借助运算符*(spread operator):相当于将数组分散成一个个的个体再传入进去

val array = arrayOf("a", "b", "c", "d")
 test(*array)
  • 至于第2条,对于Kotlin中不适用:
fun test(vararg args: String, param: String) {
    args.forEach {
          println(it)
    }

    println(param)
}

但是在这种情况下,传递参数有一个要求: 对于非可变参数,需要使用命名参数的形式来调用:

test3(*array, param = "hello")

相关文章