在动态语言,如ruby中,可以实现可变参数
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);
}
}
分享到:
- 2009-08-19 16:41
- 浏览 2281
- 评论(3)
- 论坛回复 / 浏览 (3 / 3605)
- 查看更多
相关推荐
10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可变参数.zip10.java可...
主要介绍了Java数组传递及可变参数操作,结合实例形式详细分析了java数组参数传递与可变参数相关使用技巧,需要的朋友可以参考下
java可变参数.pdf
主要介绍了Kotlin传递可变长参数给Java可变参数实例代码,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
java可变参数[文].pdf
android蓝牙框架层源码,看到java的可变参数,摘出来写了个小demo,备忘。
主要介绍了Java可变参数列表详解的相关资料,需要的朋友可以参考下
主要介绍了java 可变参数详解及实例的相关资料,需要的朋友可以参考下
主要介绍了java可变参数当做数组处理的方法,结合实例形式分析了java可变参数当做数组处理相关原理、步骤与操作注意事项,需要的朋友可以参考下
Java可变参数(Varargs)是一种语言特性,允许方法接受可变数量的参数。在方法声明中使用省略号(...) 表示,可以将不定数量的参数传递给方法。可变参数使得方法更加灵活,可以接受任意数量的参数,并以数组形式访问...
NULL 博文链接:https://zhaoshijie.iteye.com/blog/1063296
主要介绍了Java中的可变参数常见用法,结合实例形式总结分析了java可变参数的常见功能、使用方法及相关操作注意事项,需要的朋友可以参考下
那个可变参数的就是个数组,你传多少个参数都被放到那个数组里面。这样方便了程序员,因为如果不确定要传的参数的个数的话,我们要写带1个参数的,带2个参数,带3个参数的,这样很麻烦。 该进后的这个方法,我们只要...
主要介绍了java可变参数使用示例,需要的朋友可以参考下
下面小编就为大家带来一篇关于java中可变长参数的定义及使用方法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了解析Java的可变参数列表及其使用时的注意点,注意可变参数必须位于最后一项,需要的朋友可以参考下
//此时,数组arr必须是最后一个参数; public static int sum(int... arr) // 此时的参数arr是一个整形的数组 { int temp = 0; for (int i = 0; i ; i++) { temp += arr[i]; } return temp; } ...
输入的第一个数字为准备输入函数的个数。 对后面输入的函数求和。
Spring整合Quartz,在运行的过程中动态改变Trigger的参数