如果我尝试flexiPrint()
在类中重载该方法,Varargdemo
则会产生编译时错误。编译器将以下签名视为相同:
public static void flexiPrint(Object... data){}
public static void flexiPrint(Object[] data){}
有人可以向我解释为什么他们会受到同样的对待吗?我一直无法找到答案。
如果我尝试flexiPrint()
在类中重载该方法,Varargdemo
则会产生编译时错误。编译器将以下签名视为相同:
public static void flexiPrint(Object... data){}
public static void flexiPrint(Object[] data){}
有人可以向我解释为什么他们会受到同样的对待吗?我一直无法找到答案。
Object...
只不过是一个数组,这意味着与定义相同Object[]
...
(三个点)代表java中的可变参数。
我们通常在 main 方法中看到这个签名,比如main(String... args)
因此,一个类中不允许有多个具有相同签名的方法(编译时错误)。这就是您看到编译时错误的原因。
它们在“引擎盖下”是相同的。varargs (the ...
) 将数组作为参数传递:
必须在数组中传递多个参数仍然是正确的,但是 varargs 功能会自动执行并隐藏该过程。此外,它向上兼容预先存在的 API。
您可以在此处的文档中找到它。
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"}.