Effective Java 慎用可变参数

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}
————————————————
版权声明:本文为CSDN博主「Mr.菜园子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34479912/article/details/114767001

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值