前言:在java 5中提供了“Varargs”機(jī)制(可變參數(shù))价认,也就是可以定義一個(gè)和多個(gè)實(shí)參相匹配的形參,簡(jiǎn)而言之就是可以在方法定義中使用個(gè)數(shù)不確定的參數(shù)自娩。
Varargs的原理
java可變長(zhǎng)參數(shù)的實(shí)現(xiàn)原理是通過(guò)編譯器將參數(shù)列表封裝成一個(gè)數(shù)組進(jìn)行傳遞的用踩。
Varargs的使用
先舉個(gè)簡(jiǎn)單的例子:
從上圖中,我們可以看到第一個(gè)調(diào)用的地方傳入了6個(gè)參數(shù)忙迁,第二個(gè)調(diào)用的地方傳入了5個(gè)參數(shù)脐彩,但是他都調(diào)用了一個(gè)方法,不像之前要寫兩個(gè)方法來(lái)匹配這些參數(shù)姊扔,這就是varargs機(jī)制的好處惠奸。同時(shí)我們也看到varargs的使用比較簡(jiǎn)單,在變量類型后面添加...就行恰梢,然后調(diào)用的時(shí)候添加自己想要添加的參數(shù)就行佛南。這里我用了泛型梗掰,有還不要了解的小伙伴可以自行百度一下,簡(jiǎn)單的說(shuō)就是可以傳入不同類型的參數(shù)嗅回,你也可以進(jìn)行寫死及穗,比如print(String... args),但是這樣就只能傳入string類型的參數(shù)了。
Varargs的使用規(guī)則
1.優(yōu)先匹配固定參數(shù)
從圖中我們可以看到绵载,執(zhí)行了固定個(gè)數(shù)參數(shù)的方法埂陆。
2.當(dāng)可調(diào)用方法和兩個(gè)可變長(zhǎng)參數(shù)匹配時(shí),編譯器報(bào)錯(cuò)娃豹。
從上圖中可以看到焚虱,編譯器報(bào)錯(cuò)了。
3.一個(gè)方法只能有一個(gè)可變長(zhǎng)參數(shù)且該參數(shù)只能放在最后
從圖中可以看到編譯器要求放在參數(shù)列表的最后一個(gè)培愁,進(jìn)而可以得出一個(gè)參數(shù)列表只能有一個(gè)可變長(zhǎng)參數(shù)著摔。
Varargs的使用規(guī)范
1.盡量避免帶有可變長(zhǎng)參數(shù)方法的重載,以免引起不必要的錯(cuò)誤
2.避免null值威脅到可變長(zhǎng)參數(shù)的方法定续。
具體請(qǐng)看這里
Varargs用起來(lái)還是蠻好的谍咆,請(qǐng)方便的,也解決不少代碼冗余的問(wèn)題私股。
如有什么問(wèn)題摹察,請(qǐng)告知,謝謝倡鲸!