可变参数方法可以接收0个或多个指定类型的参数,被应用于需要一个方法带有n个入参的场景。如下面这个求和方法:
// Simple use of varargs
static int sum(int... args) {
int sum = 0;
for (int arg : args)
sum += arg;
return sum;
}
使用可变参数可能遇到的问题
- 对于入参校验不够优雅,且要到运行时才能暴露问题。
如下面对入参不能为空的校验:
// 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;
}
解决方式,多加一些入参配合可变参数,来避免出现这种场景。
// 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;
}
- 可能面临性能问题
因为每次调用可变参数方法都会导致数组分配【内存】和初始化,造成额外的开销。
解决方案:
多申明一些固定数量的方法。当参数的数目超过3个时,再考虑可变参数方法。
思考
可变参数在开发过程中应用较少,一半都会包在criteria或list 中。
真的要使用时,一半也都会留意到入参校验的问题。但是性能问题很容易被忽视,在后续开发过程中需要留意。