第53条:慎用可变参数

可变参数方法可以接收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 中。
真的要使用时,一半也都会留意到入参校验的问题。但是性能问题很容易被忽视,在后续开发过程中需要留意。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容