Kotlin函數(shù)默認(rèn)值的完全講解
函數(shù)默認(rèn)值
周所周知,Java語言并不支持參數(shù)使用默認(rèn)值。有人說這是因為“默認(rèn)參數(shù)”和“方法重載”同時支持的話有二義性的問題,具體真正的原因我不得而知。但是對我個人來說,Java不支持這個特性的確挺讓我蛋疼的,雖然說使用方法重載也可以間接實(shí)現(xiàn)與默認(rèn)參數(shù)這個特性相同的功能,但這就意味著你得寫更多的代碼……
簡要介紹
Kotlin函數(shù)定義時,支持對參數(shù)指定默認(rèn)值,這樣就有效減少Java之前定義重載函數(shù)的數(shù)量.
簡要對比如下:
1、Java函數(shù)定義,如果sayHelloTo函數(shù)中的lastName可以使用默認(rèn)值,則需要定義如下兩個函數(shù).
public class Person { public void sayHelloTo(String firstName,String lastName){ System.out.println("Hi,"+firstName+" "+lastName); } public void sayHelloTo(String firstName){ sayHelloTo(firstName,"noLastName"); } }
2、Kotlin定義如下,只需要一個函數(shù)
class Person { fun sayHelloTo(firstName: String, lastName: String = "noLastName") { println("Hi,$firstName $lastName") } }
Kotlin函數(shù)默認(rèn)值詳細(xì)規(guī)則
1、可以采用指定全部參數(shù)名和不指定參數(shù)名的調(diào)用方式,推薦采用指定參數(shù)名的調(diào)用方式(不能指定部分函數(shù)參數(shù)名,其他的不指定)
正確樣例:
sayHelloTo("Jerry","Aha") sayHelloTo(firstName = "Jerry",lastName = "Aha")
錯誤樣例:
sayHelloTo(firstName = "Jerry","Aha")
2、在指定參數(shù)名時,所有無默認(rèn)值參數(shù)傳入值即可
樣例:
sayHelloTo(firstName = "Jerry",lastName = "Aha")
3、在不指定參數(shù)名時,則需要區(qū)分情況:
如果函數(shù)定義時,所有具有默認(rèn)值的參數(shù)都在最后,則可以只傳入無默認(rèn)值參數(shù)值.
樣例:
函數(shù)定義:
fun sayHelloTo(firstName: String, lastName: String = "Aha")
正確樣例:
sayHelloTo("Jerry")
如果函數(shù)定義時,具有默認(rèn)值的參數(shù)并不都是在最后面,則必須傳入所有參數(shù)值.
樣例:
函數(shù)定義:
fun sayHelloTo(firstName: String, middleName: String = "",lastName: String)
正確樣例:
sayHelloTo("Jerry","","Aha")
錯誤樣例:
sayHelloTo("Jerry","Aha")
Demo代碼
1、Person.kt
class Person( val firstName: String = "Jerry", val lastName: String = "Yin" ) { fun sayHello() { System.out.println("Hi,$firstName $lastName") } fun sayHelloTo(firstName: String = "Baby", lastName: String = "Aha") { System.out.println("Hi,$firstName $lastName") } }
2、Person2.kt
class Person2( val firstName: String = "Jerry", val lastName: String ) { fun sayHello() { System.out.println("Hi,$firstName $lastName") } fun sayHelloTo(firstName: String = "Baby", lastName: String) { System.out.println("Hi,$firstName $lastName") } }
3、調(diào)用代碼:
Person().sayHello() Person("Jerry1").sayHello() Person("Jerry2", "Yin2").sayHello() Person(firstName = "Jerry3").sayHello() Person(lastName = "Yin4").sayHello() Person().sayHelloTo() Person().sayHelloTo("Baby1") Person().sayHelloTo("Baby2", "Aha2") Person().sayHelloTo(firstName = "Baby3") Person().sayHelloTo(lastName = "Aha4") Person2(lastName = "Yin5").sayHello() Person2("Jerry6", "Yin6").sayHello() Person2("", "").sayHelloTo(lastName = "Yin8") Person2("", "").sayHelloTo("Jerry9", "Yin9")
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。
相關(guān)文章
Android利用ContentProvider讀取短信內(nèi)容
這篇文章主要為大家詳細(xì)介紹了Android利用ContentProvider讀取短信內(nèi)容,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11Android開源AndroidSideMenu實(shí)現(xiàn)抽屜和側(cè)滑菜單
這篇文章主要為大家詳細(xì)介紹了Android開源AndroidSideMenu實(shí)現(xiàn)抽屜和側(cè)滑菜單,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02Android?自定義開源庫?EasyView實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了Android自定義開源庫EasyView實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Android開發(fā)手冊自定義Switch開關(guān)按鈕控件
這篇文章主要為大家介紹了Android開發(fā)手冊自定義Switch開關(guān)按鈕控件的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06Android如何在一個TextView中設(shè)置不同字體大小、不同字體顏色封裝
在開發(fā)過程中遇到過這樣一種業(yè)務(wù),有很多單行文本字體,字符串中每一部分的字體樣式、大小、顏色都不相同,傳統(tǒng)的做法是放多個TextView以達(dá)到效果,這篇文章主要介紹了android在一個TextView中設(shè)置不同字體大小、不同字體顏色封裝,需要的朋友可以參考下2024-07-07Android組件之DrawerLayout實(shí)現(xiàn)抽屜菜單
DrawerLayout組件同樣是V4包中的組件,也是直接繼承于ViewGroup類,所以這個類也是一個容器類。接下來通過本文給大家介紹Android組件之DrawerLayout實(shí)現(xiàn)抽屜菜單,感興趣的朋友一起學(xué)習(xí)吧2016-02-02android實(shí)現(xiàn)在橫豎屏切換時頁面信息不被重置的示例分享
這篇文章主要介紹了android實(shí)現(xiàn)在橫豎屏切換時頁面信息不被重置的示例,需要的朋友可以參考下2014-02-02Android在OnCreate中獲取控件的寬度和高度的實(shí)現(xiàn)代碼
在Android中,有時需要對控件進(jìn)行測量,得到的控件寬度和高度可以用來做一些計算。在需要自適應(yīng)屏幕的情況下,這種計算就顯得特別重要2012-11-11