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中可變參數就說到這裏吧,說的不夠全面,想到哪裏就說到哪裏編譯器