请考虑以下方法签名:
public fooMethod (Foo[] foos) { /*...*/ }
和
public fooMethod (Foo... foos) { /*...*/ }
说明:前者将一个Foo对象数组作为参数 - fooMethod(new Foo[]{..})
而后者采用任意数量的Foo类型的参数,并将它们表示为方法中的Foo:s数组 - fooMethod(fooObject1, fooObject2, etc...
).
如果两者都被定义,Java会抛出一个拟合,声称它们是重复的方法.我做了一些侦探工作,发现第一个声明确实需要一个显式的Foo对象数组,这是调用该方法的唯一方法.第二种方式实际上接受任意数量的Foo参数并且还接受Foo对象的数组.
所以,问题是,既然后一种方法似乎更灵活,有没有理由使用第一个例子,或者我错过了什么重要的东西?
这些方法实际上是相同的.
此功能称为varargs,它是一种编译器功能.幕后花絮就是前版本.
如果你定义一个接受Object的方法,你会发现一个陷阱,你发送了一个Object []类型的参数!