到J2SE1.4為止,一直無(wú)法在Java程序里定義實(shí)參個(gè)數(shù)可變的方法——因?yàn)镴ava要求實(shí)參(Arguments)和形參(Parameters)的數(shù)量和類型都必須逐一匹配,而形參的數(shù)目是在定義方法時(shí)就已經(jīng)固定下來(lái)了。盡管可以通過(guò)重載機(jī)制,為同一個(gè)方法提供帶有不同數(shù)量的形參的版本,但是這仍然不能達(dá)到讓實(shí)參數(shù)量任意變化的目的。
成都創(chuàng)新互聯(lián)公司專注于朔州網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供朔州營(yíng)銷型網(wǎng)站建設(shè),朔州網(wǎng)站制作、朔州網(wǎng)頁(yè)設(shè)計(jì)、朔州網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造朔州網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供朔州網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。然而,有些方法的語(yǔ)義要求它們必須能接受個(gè)數(shù)可變的實(shí)參——例如著名的main方法,就需要能接受所有的命令行參數(shù)為實(shí)參,而命令行參數(shù)的數(shù)目,事先根本無(wú)法確定下來(lái)。
對(duì)于這個(gè)問(wèn)題,傳統(tǒng)上一般是采用“利用一個(gè)數(shù)組來(lái)包裹要傳遞的實(shí)參”的做法來(lái)應(yīng)付。
1.用數(shù)組包裹實(shí)參
“用數(shù)組包裹實(shí)參”的做法可以分成三步:首先,為這個(gè)方法定義一個(gè)數(shù)組型的參數(shù);然后在調(diào)用時(shí),生成一個(gè)包含了所有要傳遞的實(shí)參的數(shù)組;最后,把這個(gè)數(shù)組作為一個(gè)實(shí)參傳遞過(guò)去。
這種做法可以有效的達(dá)到“讓方法可以接受個(gè)數(shù)可變的參數(shù)”的目的,只是調(diào)用時(shí)的形式不夠簡(jiǎn)單。
J2SE1.5中提供了Varargs機(jī)制,允許直接定義能和多個(gè)實(shí)參相匹配的形參。從而,可以用一種更簡(jiǎn)單的方式,來(lái)傳遞個(gè)數(shù)可變的實(shí)參。
Varargs的含義
大體說(shuō)來(lái),“Varargs”是“variablenumberofarguments”的意思。有時(shí)候也被簡(jiǎn)單的稱為“variablearguments”,不過(guò)因?yàn)檫@一種叫法沒(méi)有說(shuō)明是什么東西可變,所以意義稍微有點(diǎn)模糊。
2.定義實(shí)參個(gè)數(shù)可變的方法
只要在一個(gè)形參的“類型”與“參數(shù)名”之間加上三個(gè)連續(xù)的“.”(即“...”,英文里的句中省略號(hào)),就可以讓它和不確定個(gè)實(shí)參相匹配。而一個(gè)帶有這樣的形參的方法,就是一個(gè)實(shí)參個(gè)數(shù)可變的方法。
清單1:一個(gè)實(shí)參個(gè)數(shù)可變的方法
private static int sumUp(int... values) { }