A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhrnghgwsws   /  2014-5-23 13:43  /  3927 人查看  /  6 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 zhrnghgwsws 于 2014-5-23 14:56 编辑

可变参数为什么要定义在参数列表的最后面?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

6 个回复

倒序浏览
先来了解一下如下java中是之前是如何处理的:
void  add(int a )
void  add(int a, int b)
void  add (int a,int b,int c)
比如这里的add方法就是向集合中添加元素的方法,我们发现这样的重载会使得代码很臃肿,而且复用性也不是很高。
在之前的java版本中是这样设计的:
void  add(int[]  a)
就是将接受到的参数类型变成一个数组,在方法中对数组进行遍历,这样数组中有几个元素,就添加几个元素,从而就简化
了程序。

后来就出现了可变参数了,就可以将上边的代码写为:
void  add(int...)
虽然形式上发生了改变,但其内部的调用方式是没有变化的,也就是将接受来个数不确定的参数,装在一个数组中,而且
从int...开始后所有的参数,就会作为数组中的元素装进数组中。
当然有的时候,参数中包含其他参数和可变参数,比如:
void  add(String  str,int...):那么从int...开始之后的参数就是可变参数,而str这个参数就不装入到数组中了。
那么,如果写成
void  add(int...,String str) :根据调用的规则,str也会作为一个参数添加到数组中去,这当然与我们的程序设计初衷是不相符的。

所以,在使用可变参数的时候,要将可变参数定义在参数列表的最后面。

点评

public void add(int ...is){} public void add(String a,int ...is){}这样在eclipse中编译才通过  发表于 2014-6-12 02:55

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 很给力!

查看全部评分

回复 使用道具 举报 2 0
谢谢哈 受启发了
回复 使用道具 举报
没考虑过这个问题,哈哈,受教了
回复 使用道具 举报
谢谢整理!
回复 使用道具 举报
受教学习了,一直没有注意到这个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马