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

相關文章
相關標籤/搜索