Kotlin学习系列之:可变参数

Kotlin中的可变参数

  1. 回顾一下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;
        }
    
    }

    注意点:

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

    fun test(vararg args: String) {
        args.forEach {
            println(it)
        }
    }

    调用:

    fun main(args: Array<String>) {
        test("a", "b", "c", "d")
    }
  3. 对比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")
展开阅读全文

没有更多推荐了,返回首页