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中可变参数规则:函数
先来看看咱们用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中可变参数就说到这里吧,说的不够全面,想到哪里就说到哪里编译器