官术网_书友最值得收藏!

  • Kotlin進階實戰
  • 沈哲 易龐宙編著
  • 745字
  • 2022-07-27 18:28:02

2.1.1 函數的參數

Kotlin函數的參數使用Pascal表示法定義,即name:type。參數之間采用逗號隔開,示例如下:

1.默認參數

默認參數是指函數中的參數可以包含默認值。當省略某參數時,即采用默認值。

與Java相比,使用默認參數可以減少方法重載的數量。例如下面的代碼:

如果不傳參數的話,就會使用默認的參數:

     RxJavaUtils.preventDuplicateClicksTransformer()

這段代碼還包含兩個注解:

· @JvmStatic:表示該方法為靜態方法。Kotlin可以為對象聲明或者伴生對象中定義的函數使用@JvmStatic(上述例子RxJavaUtils即為對象聲明,對象聲明和伴生對象會在2.3節詳細介紹)。

· @JvmOverloads:使用了默認參數之后,可以避免重載。但是Java卻無法調用,因為對Java而言只會對一個方法可見,它是所有參數都存在的完整參數簽名的方法。如果希望向Java調用者暴露多個重載,可以使用@JvmOverloads注解。

如果不使用@JvmOverloads,上述Kotlin代碼相當于下面的Java代碼:

因此,無法使用默認參數。如果想在Java中調用含有默認參數的方法,可使用如下代碼:

     RxJavaUtils.preventDuplicateClicksTransformer();

必須在原先的preventDuplicateClicksTransformer方法上標注@JvmOverloads。

2.命名參數

對于下面的函數:

     fun sum(x: Int=0, y: Int): Int {
        return x + y
     }

如果想使用默認參數,可以這樣:

     sum(y=2) //相當于sum(0,2)

這里y=2使用了命名參數,顯式地指定參數y的值。

我們在使用默認參數時,可以指定某個參數的值。例如下面的函數:

     fun sum(x: Int, y: Int=0,z: Int=1): Int {
        return x + y + z
     }

如果只想讓參數y使用默認值,那么可以這樣使用:

     sum(1,z=5) //相當于sum(1,0,5)

在一個函數調用中,如果包含位置參數和命名參數,那么所有位置參數都要放在第一個命名參數之前。

3.可變數量的參數

Kotlin的可變參數與Java的可變參數類似,但是Kotlin需要對參數使用vararg進行修飾。

Kotlin的可變參數一般是函數的最后一個參數,例如:

toList()也可以傳遞數組,不過不能像Java那樣直接傳遞數組。需要使用展開運算符“*”(在參數名前加“*”),它表示解包數組,能夠讓數組中的每個元素在函數中被作為單獨的參數。

如果可變參數不是函數的最后一個參數,那么后面的參數需要通過命名參數來傳值:

主站蜘蛛池模板: 张家川| 东城区| 临夏市| 淮滨县| 竹北市| 屏东县| 桐乡市| 汤原县| 安远县| 大庆市| 江源县| 明光市| 冷水江市| 平罗县| 涞源县| 皋兰县| 清流县| 临漳县| 开原市| 肥乡县| 顺平县| 威信县| 靖安县| 龙泉市| 将乐县| 杭锦旗| 曲水县| 招远市| 松江区| 巴林右旗| 徐水县| 海口市| 万荣县| 德昌县| 集安市| 南皮县| 建阳市| 延川县| 科技| 东海县| 化州市|