第42条:慎用可变参数
来源:互联网 发布:科曼奇为什么下马 知乎 编辑:程序博客网 时间:2024/05/04 08:37
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}
阅读全文
0 0
- 第42条:慎用可变参数
- 2015062807 - EffactiveJava笔记 - 第42条 慎用可变参数
- (42):慎用可变参数
- Effective Java慎用可变参数
- Effective Java 读书笔记——42:慎用可变参数
- 第41条:慎用重载
- 2015062805 - EffactiveJava笔记 - 第41条 慎用重载(1)
- 2015062806 - EffactiveJava笔记 - 第41条 慎用重载(2)
- 第41条 方法——慎用重载
- 第5章(4) 可变参数列表
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- 可变参数
- hadoop问题合集&&解决方法
- OracleDBconsoleorcl服务无法启动的原因及解决思路
- 一线企业JVM调优实战
- C语言的那些坑(数组做参数计算大小问题)
- java Json查询
- 第42条:慎用可变参数
- namenum
- IntelliJ IDEA 中创建 Maven Scala 项目
- 贪心笔记
- 从底部弹出的PopupWindow
- 引用类型和基本类型区别
- 人到35岁,出路在哪里?
- kali中怎么dos攻击
- lintcode&九章算法——No.50 数组剔除元素后的乘积 ? 待解决