• 第42条:慎用可变参数


    Java 1.5增加可变参数方法,可变参数方法接受0个或者多个指定类型的参数。

    可变参数的机制通过先创建一个数组,数组的大小为在调用位置所传递的参数数量,然后将参数值传到数组中,最后将数组传递给方法。

    static int sum(int... args) {
        int sum=0;
        for(int arg : args)
            sum += arg;
        return sum;
    }

    该方法如期望的那样,sum()=0,sum(1,2,3)=6

    有时候,需要编写需要1个或者多个某类型参数的方法,而不是0个或者多个:

    static int min(int firstArg, int... remainingArgs) {//可变参数必须放在参数列表的最后
        int min = firstArg;
        for(int arg : remainingArgs)
            if(arg < min)
                min = arg;
        return min;
    }

    在Java 1.5之后,Array.asList改造成可变参数方法:

    public static <T> List<T> asList(T... a) {
            return new ArrayList<>(a);
    }

    在这之前,打印数组内容通常是这样的:

    System.out.println(Arrays.asList(digits))

    对于对象引用类型的数组,这样没有问题,但是如果是基本类型的数组,由于数组从Object继承toString实现,会打印出无意义的字符串。

    这就解释为什么1.5在Arrys类中增加toString(long[]),toString(int[]),toString(short[]),toString(char[]),toString(byte[]),toString(boolean[]),toString(float[]),toString(double[]),toString(Object[]) 来提供打印数组功能。

    在重视性能的情况下,使用可变参数机制要小心,因为可变参数方法的每次调用都会导致进行一次数组分配和初始化,有一种折中的解决方案,假设确定某个方法大部分调用会有3个或者更少的参数,就声明该方法的5个重载,每个重载带有0至3个普通参数,当参数数目超过3个时,使用可变参数方法。

    public void foo() {}
    public void foo() {int a1}
    public void foo() {int a1, int a2}
    public void foo() {int a1, int a2, int a3}
    public void foo() {int a1, int a2, int a3, int... rest}
  • 相关阅读:
    龟兔赛跑(多线程练习题)
    进程和线程详解
    toString()方法详解
    使用IDEA的Git插件上传项目教程
    js运算符单竖杠“|”的用法和作用及js数据处理
    vue项目axios请求接口,后端代理请求接口404,问题出现在哪?
    jQuery的ajax的post请求json格式无法上传空数组
    es6 学习小记 扩展运算符 三个点(...)
    select2插件使用小记2
    js中多维数组转一维
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5745675.html
Copyright © 2020-2023  润新知