我希望在一个String的方法varargs
和另一个String[]
中使用一个参数重载两个方法但是我实现了以下编译时错误:
Duplicate method registerByName(String...)
我的代码段是:
public void registerByName(String[] names)
{
}
public void registerByName(String...names)
{
}
为什么?
答案 0 :(得分:2)
“String ...”和“String []”只是一件事......
答案 1 :(得分:1)
vararg
是放置(Object[])
的另一种方式,因此方法MyMethod(MyObject[] obj)
和MyMethod(MyObject... obj)
与编译器相同。这只是语法糖。
您可以参考doc
仍然必须在数组中传递多个参数,但varargs功能会自动化并隐藏进程。此外,它与先前存在的API向上兼容。因此,例如,MessageFormat.format方法现在具有此声明:
public static String format(String pattern, Object... arguments);
最终参数类型之后的三个句点表示最终参数可以作为数组或参数序列传递。 [...]
答案 2 :(得分:0)
如果你有像
这样的方法public static void registerByName(String... names);
使用数组参数调用它是完全合法的:
registerByName(new String[] {"sam"});
因此,您无法使用Type[]
和Type...
重叠。
JVM甚至不知道这两个签名之间的区别。尝试使用varargs方法在类文件上运行javap
。