【发布时间】:2012-02-08 22:25:37
【问题描述】:
我想知道为什么在 Java 中不允许使用 Foo(Object[] args) 重载 Foo(Object[] args),尽管它们的使用方式不同?
Foo(Object[] args){}
用法如下:
Foo(new Object[]{new Object(), new Object()});
而另一种形式:
Foo(Object... args){}
用法如下:
Foo(new Object(), new Object());
这背后有什么原因吗?
【问题讨论】:
-
我可能遗漏了一些东西,但你为什么需要超载?如果您将您的方法声明为
void foo(Object... args),那么您可以使用 eitherfoo(new Object(), new Object())orfoo(new Object[] { new Object(), new Object() })调用它并获得相同的结果。有关示例,请参见 this related question。 -
可变参数只是将最后声明的数组(如
int[]或Object[])转换为可变参数类型的方法签名的标志。除此之外 - 方法签名之间没有区别。同样的问题是不能重载private和public方法。
标签: java methods parameters arguments language-specifications