2

如果我尝试flexiPrint()在类中重载该方法,Varargdemo则会产生编译时错误。编译器将以下签名视为相同:

public static void flexiPrint(Object... data){}
public static void flexiPrint(Object[] data){}

有人可以向我解释为什么他们会受到同样的对待吗?我一直无法找到答案。

4

3 回答 3

3

Object...只不过是一个数组,这意味着与定义相同Object[]

...(三个点)代表java中的可变参数

我们通常在 main 方法中看到这个签名,比如main(String... args)

因此,一个类中不允许有多个具有相同签名的方法(编译时错误)。这就是您看到编译时错误的原因。

于 2012-09-11T18:37:05.043 回答
3

它们在“引擎盖下”是相同的。varargs (the ...) 将数组作为参数传递:

必须在数组中传递多个参数仍然是正确的,但是 varargs 功能会自动执行并隐藏该过程。此外,它向上兼容预先存在的 API。

您可以在此处的文档中找到它。

于 2012-09-11T18:38:15.633 回答
2

Variable Length Arguments, like Object... are syntactic sugar. When used, for example:

flexiPrint("apple", "peach", "plum");

Then "apple", "peach", "plum" are actually turned into: `Object[]{"apple", "peach", "plum"}.

于 2012-09-11T18:41:15.753 回答