Java 使用vararg和String[]参数重载两个方法
我想用一个参数重载两个方法,一个是String的方法Java 使用vararg和String[]参数重载两个方法,java,Java,我想用一个参数重载两个方法,一个是String的方法varargs,另一个是String[],但我实现了以下编译时间错误: Duplicate method registerByName(String...) 我的代码片段是: public void registerByName(String[] names) { } public void registerByName(String...names) { } 为什么?vararg是另一种放置(对象[])的方法,因此方法MyMetho
varargs
,另一个是String[]
,但我实现了以下编译时间错误:
Duplicate method registerByName(String...)
我的代码片段是:
public void registerByName(String[] names)
{
}
public void registerByName(String...names)
{
}
为什么?
vararg
是另一种放置(对象[])
的方法,因此方法MyMethod(MyObject[]obj)
和MyMethod(MyObject…obj)
对于编译器是相同的。只是语法上的糖
你可以参考
在一个数组中必须传递多个参数仍然是正确的,但是varargs特性会自动并隐藏该过程。此外,它与先前存在的API是向上兼容的。例如,MessageFormat.format方法现在有以下声明:
public static String format(String pattern,
Object... arguments);
final参数类型后的三个句点表示,final参数可以作为数组或参数序列传递。[……]
如果你有这样的方法
public static void registerByName(String... names);
使用数组参数调用它是完全合法的:
registerByName(new String[] {"sam"});
因此,您不能使用Type[]
和Type…
重载
JVM甚至不知道这两个签名之间的区别。尝试使用varargs方法在类文件上运行
javap
。“String…”和“String[]”完全是一回事…我不知道这是否是一个好的解释。您也可以使用int
参数调用foo(整数x)
,但仍然会在两种变体中重载该方法,因此这种推理并不总是有效的。(答案的最后一句更像它)。