- 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那樣直接傳遞數組。需要使用展開運算符“*”(在參數名前加“*”),它表示解包數組,能夠讓數組中的每個元素在函數中被作為單獨的參數。

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

- 現代C++編程:從入門到實踐
- Boost.Asio C++ Network Programming(Second Edition)
- ASP.NET Web API:Build RESTful web applications and services on the .NET framework
- Spring技術內幕:深入解析Spring架構與設計
- Practical DevOps
- Python貝葉斯分析(第2版)
- Serverless架構
- 零基礎學單片機C語言程序設計
- 零基礎輕松學SQL Server 2016
- Spring核心技術和案例實戰
- 零基礎趣學C語言
- 從零開始學C語言
- Java EE企業級應用開發教程(Spring+Spring MVC+MyBatis)
- C++編程兵書
- Java Web開發實例大全(基礎卷) (軟件工程師開發大系)