浏览 3639 次
锁定老帖子 主题:java可变参数
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-08-19
最后修改:2009-09-18
def test(* arg) for s in arg puts s,s.class end end test(1,"2",2.3) 只需在参数前加一个*即可。 调用方法时,可以传入任意数量,任意类型的参数了。 一直以为可变参数是动态语言的特性呢。 最近才发现,java里原来也可以实现可变参数。 SE5之前,我们如果想实现可变参数的效果,可以通过一个数组或Collection public static void test(String [] args){ for (int i = 0; i < args.length; i++) { System.out.println(args[i]); } } 如果是想不同类型的参数一起传,可以使用Collection,例如List等。 在SE5之后,java添加了这个新功能。也很简单。 只用三个点号(...) public static void test(int ...objects){ //参数都是int类型的,所以可以用foreach for (int object : objects) { System.out.println(object); } } public static void main(String [] args){ test(); test(1); test(1,2,3,4,5); } 参数类型可以是Object的。 另外,如同ruby中一样,可变参数可以与固定的参数相结合,不过需要注意的是,如果结合使用,那么可变参数必须卸载最后面。 public static void test(String str,Object ...objects){ System.out.println("str="+str); for(Object obj : objects){ System.out.println(obj); } } public static void main(String [] args){ test("abc"); test("abc",1,"abc",88.8f); } 另外,一个方法中,只能定义一个可变参数! 知道了这个特性以后,以后可以在项目中使用了,应该会带来一些方便。 下面,让我们来看看具体使用的例子。 在Collections类的addAll方法中 /* * ... * @since 1.5 */ public static <T> boolean addAll(Collection<? super T> c, T... elements) { boolean result = false; for (T element : elements) result |= c.add(element); return result; } 采用了范型,所以可变参数的类型也可以使任意类型的。 来看个例子 public static void main(String [] args){ Collection col = new LinkedList(); boolean flag = Collections.addAll(col, 123,123.0f,888.0,"float",'c'); for(Iterator ite = col.iterator();ite.hasNext();){ Object obj = ite.next(); System.out.print(obj.getClass().getName()); System.out.println(" "+obj); } } 不加范型,参数可以是任意类型的 加上范型,参数类型即可指定 public static void main(String [] args){ Collection<String> col = new LinkedList<String>(); boolean flag = Collections.addAll(col,"int","float","string","123","char"); for(Iterator ite = col.iterator();ite.hasNext();){ Object obj = ite.next(); System.out.println(" "+obj); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-08-19
你要说明什么??
|
|
返回顶楼 | |
发表时间:2009-08-20
jcs7575 写道 你要说明什么??
|
|
返回顶楼 | |
发表时间:2010-04-09
george_space 写道 jcs7575 写道 你要说明什么??
|
|
返回顶楼 | |