方法与对象类的参数可变参数和对象类的数组重载(Method overloading with arg

2019-07-31 12:34发布

如果我试图重载方法flexiPrint()的一类Varargdemo然后它产生一个编译时间错误。 该编译器将下面的签名是相同的:

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

为什么他们都一视同仁,以我有人能解释一下吗? 我一直没能找到答案。

Answer 1:

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

... (三个点)表示可变参数在Java中。

我们通常看到的主要方法,此签名像main(String... args)

所以,具有多于一个的方法用相同的签名不是在类允许(编译时间错误)。 这就是为什么你看到编译时错误。



Answer 2:

它们是相同的“引擎盖下”。 可变参数(在... )传递一个数组作为参数:

它仍然是真实的多参数必须在阵列中已过,但可变参数功能自动化和隐藏的进程。 此外,它与先前存在的API向上兼容。

您可以在文档中找到它这里 。



Answer 3:

可变长度参数,如Object...是语法糖。 当使用,例如:

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

然后“苹果”,“桃”,“李子”实际上变成:`对象[] {“苹果”,“桃”,“李子”}。



文章来源: Method overloading with argument vararg of object class and array of object class