Kotlin函数可变参数

Java中可变参数规则:数组

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

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

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方法idea

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方法了。spa

注释掉的for循环就是自动生成的,可是我不想用它生成的那个版本,因此本身改写了for循环,可是结果都是正确的。code

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

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便可rem

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中可变参数就说到这里吧,说的不够全面,想到哪里就说到哪里编译器

相关文章
相关标签/搜索