考虑以下方法签名:Object数组
public fooMethod (Foo[] foos) { /*...*/ }
和
public fooMethod (Foo... foos) { /*...*/ }
说明:前者以富-对象数组作为参数 - fooMethod(new Foo[]{..})
- 而后者接受任意数量的Foo类型的参数,并将其作为方法内的Foo:s数组显示 - fooMethod(fooObject1, fooObject2, etc...
)。
如果两者都被定义,则Java会抛出适当的声明,声称它们是重复的方法。我做了一些侦探工作,发现第一个声明确实需要一个明确的Foo对象数组,并且这是调用该方法的唯一方法。第二种方法实际上接受任意数量的Foo参数,并接受Foo对象的数组。
所以,问题是,由于后一种方法似乎更加灵活,是否有任何理由使用第一个例子,或者我错过了任何重要的东西?
不知道Java,这是黑暗中的刺,但我认为第一个效率稍微高一点,因为:a)你可能只会传递一个指针,并且b)你会将一个指针传递给内存的一个连续部分。 – 2008-10-06 12:11:30
@monoxide:不,这两种形式都会生成等效的调用字节码,这两种形式都需要构建一个数组才能通过。 – 2008-10-06 12:13:58
第二种形式是第一种语法糖。所以,fooMethod(new Foo(1),new Foo(2))在这里与fooMethod(new Foo [] {new Foo(1),new Foo(2)}相同 – 2008-10-06 12:14:51