为什么在Java varargs(int ... x,double ... y)中出现此编译错误?

时间:2018-08-20 10:27:55

标签: java methods variadic-functions

static void m(int ...x,double ...y){}

我正在尝试使用此方法。但这会编译错误。我想知道原因。

int x[]=new int[2];
double y[]=new double[2];

我制作了两个这样的数组,我想将它们解析为方法 m

m(x,y); like this.

3 个答案:

答案 0 :(得分:5)

您不能有像void m(int ...x,double ...y){}这样的双变量。

相反,您可以拥有void m(int[] x, double[] y){}

答案 1 :(得分:4)

阅读官方文档:

  

变量只能在最后一个参数位置使用。

Oracle documentation on Varargs

答案 2 :(得分:2)

您不能有两个varargs,但关键问题是“为什么这不可能?”因为限制不是来自Java本身。例如,考虑以下两种情况:

  1. 如果您有return set(word_list)->您不知道someMehod(Shape ...shape, Square ...square) args在哪里停止或Shape args在哪里开始。
  2. 如果Square扩展了Square->由于多态性,Shape类可以存在于Shape...shape args中,这很令人困惑。 li>