方法签名中的对象数组

Hen*_*aul 5 java arrays methods

请考虑以下方法签名:

public fooMethod (Foo[] foos) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

public fooMethod (Foo... foos) { /*...*/ }
Run Code Online (Sandbox Code Playgroud)

说明:前者将一个Foo对象数组作为参数 - fooMethod(new Foo[]{..})而后者采用任意数量的Foo类型的参数,并将它们表示为方法中的Foo:s数组 - fooMethod(fooObject1, fooObject2, etc...).

如果两者都被定义,Java会抛出一个拟合,声称它们是重复的方法.我做了一些侦探工作,发现第一个声明确实需要一个显式的Foo对象数组,这是调用该方法的唯一方法.第二种方式实际上接受任意数量的Foo参数并且还接受Foo对象的数组.

所以,问题是,既然后一种方法似乎更灵活,有没有理由使用第一个例子,或者我错过了什么重要的东西?

Shi*_*iel 12

这些方法实际上是相同的.

此功能称为varargs,它是一种编译器功能.幕后花絮就是前版本.

如果你定义一个接受Object的方法,你会发现一个陷阱,你发送了一个Object []类型的参数!