找回密码
 注册

QQ登录

快捷登录

新浪微博登陆

搜索

object... args 绝对陷阱

已有 448 次阅读2009-12-24 15:40 Informatique


public class TestObjectArgs {

    /**
     * @param args
     */
    public static void main(String[] args) {
        new TestObjectArgs("aa","bb","cc");

    }
   
    public TestObjectArgs(Object... args){
        System.out.println("Object...");
        for(Object arg:args){
            System.out.println(arg);
        }
    }
    public TestObjectArgs(String arg1, Object... args){
        System.out.println("String, Object...");
        for(Object obj:args){
            System.out.println(obj);
        }
    }
   
}

对于new TestObjectArgs("aa","bb","cc"), 猜一猜是TestObjectArgs(Object... args)还是TestObjectArgs(String arg1, Object... args)被执行。
答案是TestObjectArgs(String arg1, Object... args)
**************************
下面转关于object... args 的用法
可变参数(Varargs)
  可变参数使程序员可以声明一个接受可变数目参数的方法。注意,可变参数必须是
函数声明中的最后一个参数。假设我们要写一个简单的方法打印一些对象,
util.write(obj1);
util.write(obj1,obj2);
util.write(obj1,obj2,obj3);

  在JDK1.5之前,我们可以用重载来实现,但是这样就需要写很多的重载函数,显得
不是很有效。如果使用可变参数的话我们只需要一个函数就行了
public void write(Object... objs) {
   for (Object obj: objs)
      System.out.println(obj);
}
  在引入可变参数以后,Java的反射包也更加方便使用了。对于
c.getMethod("test", new Object[0]).invoke(c.newInstance(), new Object[0])),现在我们可以这样写了
c.getMethod("test").invoke(c.newInstance()),这样的代码比原来清楚了很多。 
返回顶部