可變參數(shù)方法可以接收0個(gè)或多個(gè)指定類型的參數(shù)垒酬,被應(yīng)用于需要一個(gè)方法帶有n個(gè)入?yún)⒌膱鼍霸狡健H缦旅孢@個(gè)求和方法:
// Simple use of varargs
static int sum(int... args) {
int sum = 0;
for (int arg : args)
sum += arg;
return sum;
}
使用可變參數(shù)可能遇到的問題
- 對于入?yún)⑿r?yàn)不夠優(yōu)雅闸拿,且要到運(yùn)行時(shí)才能暴露問題褐桌。
如下面對入?yún)⒉荒転榭盏男r?yàn):
// The WRONG way to use varargs to pass one or more arguments!
static int min(int... args) {
if (args.length == 0)
throw new IllegalArgumentException("Too few arguments");
int min = args[0];
for (int i = 1; i < args.length; i++)
if (args[i] < min)
min = args[i];
return min;
}
解決方式针肥,多加一些入?yún)⑴浜峡勺儏?shù)饼记,來避免出現(xiàn)這種場景。
// The right way to use varargs to pass one or more arguments
static int min(int firstArg, int... remainingArgs) {
int min = firstArg;
for (int arg : remainingArgs)
if (arg < min)
min = arg;
return min;
}
- 可能面臨性能問題
因?yàn)槊看握{(diào)用可變參數(shù)方法都會導(dǎo)致數(shù)組分配【內(nèi)存】和初始化慰枕,造成額外的開銷具则。
解決方案:
多申明一些固定數(shù)量的方法。當(dāng)參數(shù)的數(shù)目超過3個(gè)時(shí)具帮,再考慮可變參數(shù)方法博肋。
思考
可變參數(shù)在開發(fā)過程中應(yīng)用較少低斋,一半都會包在criteria或list 中。
真的要使用時(shí)匪凡,一半也都會留意到入?yún)⑿r?yàn)的問題膊畴。但是性能問題很容易被忽視,在后續(xù)開發(fā)過程中需要留意病游。