• Kotlin函数可变参数


    Java中可变参数规则:

    • 可变参数前面可以有其他参数,但是可变参数只能出现在参数列表的最后
    • 用...代表可变参数,...位于变量类型和变量名之间
    • 调用含有可变参数的方法时,编译器为该可变参数隐式创建一个数组,在方法体中以数组的形式访问可变参数

    先来看看Java中的剩余参数是咋用的

    public class TestVariableParemeters {
    
        public static void main(String[] args) {
            new TestVariableParemeters().addNumbers("liuliqianxiao", 1, 2, 3, 4, 5);
        }
    
        public int addNumbers(String name, int... args) {
            int result = 0;
            for (int i = 0; i < args.length; i++) {
                result += args[i];
            }
            return result;
        }
    
    }

    Kotlin中可变参数规则:

    • 可变参数不必是函数的参数列表中的最后一个
    • 用vararg paramName: paramType格式申明一个可变参数
    • 和Java一样,在函数体内部,可以以数组的形式使用这个可变参数的形参变量

    先来看看我们用Kotlin重写上面的addNumbers方法

    fun main(args: Array<String>) {
        User().addNumbers("liuliqianxiao",1, 2, 3, 4, 5)
    }
    
    class User{
        fun addNumbers(name: String, vararg args: Int): Int {
            var result = 0
    //        for (i in args.indices) {
    //            result += args[i]
    //        }
            for(it in args){
                result += it
            }
            return result
        }
    }

    不得不说idea真是非常智能,我将上述Java版的addNumbers方法直接拷贝粘贴到Kotlin文件中,立马提示我是否要转换成Kotlin代码,点确定就能生成Kotlin版本的addNumbers方法了。

    注释掉的for循环就是自动生成的,但是我不想用它生成的那个版本,所以自己改写了for循环,但是结果都是正确的。

    上述规则中说了,可变参数不必是参数里列表中的最后一个,来看看这种情况,函数怎么调用:

    fun main(args: Array<String>) {
        //调用的时候,给id赋值必须用命名参数形式
        println(User().addNumbers("liuliqianxiao",1, 2, 3, 4, 5, id = 12345))
    }
    
    class User{
        //相对于上面加了最后一个固定参数id
        fun addNumbers(name: String, vararg args: Int, id: Int): Int {
            var result = 0
    //        for (i in args.indices) {
    //            result += args[i]
    //        }
            for(it in args){
                result += it
            }
            return result
        }
    }

    再来看一个接受多种类型参数的可变参数,只需将类型设成Any即可

    fun main(args: Array<String>) {
        test(1,"Hello,Kotlin!",'a',User(1,"liuliqianxiao"))
    }
    
    //用Any代表任意类型
    fun test(vararg args: Any){
        for(it in args){
            println(it)
        }
    }
    
    class User(var id: Int,var name: String){
        override fun toString(): String {
            return "User(id=$id, name='$name')"
        }
    }
    
    //输出结果
    //1
    //Hello,Kotlin!
    //a
    //User(id=1, name='liuliqianxiao')

    关于Kotlin中可变参数就说到这里吧,说的不够全面,想到哪里就说到哪里

  • 相关阅读:
    Vue2.0权限树组件
    request.getParameter()获取不到数据的问题
    Spring framework体系架构
    iframe高度自适应的6个方法
    javascript 实现双指放大缩小旋转图片
    php curl请求返回NULL解决方法
    微信小程序判断手机有没有定位的方法
    微信小程序data-dd="{{dd}}"失效的解决方法
    PHP 网页编码问题
    pip install psd-tools安装失败方法
  • 原文地址:https://www.cnblogs.com/liuliqianxiao/p/7144343.html
Copyright © 2020-2023  润新知