Java varargs收到的顺序与它们的顺序相同吗?

时间:2013-10-13 09:12:47

标签: java variadic-functions

我找不到关于这个问题的任何文件。

在某些ListsMaps中,元素的顺序是随机的,与将它们添加到列表/地图的顺序不同。关于var args是真的,还是按照发送它们的顺序收到它们?

例如,我有一个表单验证方法,它采用字段名称和vararg规则列表。如果我提供规则:Rules.INT, Rules.MAX.arg(100),那么我希望在检查Rules.INT规则之前先检查Rules.MAX规则,因为Rules.MAX假定给定值是一个适当的整数。因此,如果Rules.INT失败,则不会调用Rules.MAX - 但是如果以随机顺序接收varargs,则Rules.MAX可能会在Rules.INT之前被调用,并且可能如果值不是整数,则抛出异常,这是我不想要的。

编辑:这是我使用var args的方法,以澄清:

public boolean validate(String name, Rule... rules)
{
   String value = getValue(name);
   for (Rule rule : rules)
   {
     if (! rule.match(value) )
        return false;
   }
   return true;
}

现在,如果我通过validate("age", Rule.INT, Rule.MAX.arg(100) )调用此方法,我是否可以确保在Rule.INT方法Rule.MAX之前对validate()进行迭代/检查?

1 个答案:

答案 0 :(得分:9)

按指定的顺序接收所有方法参数,无论是varargs还是其他方式。在引擎盖下,varargs参数是指定参数类型的数组,而不是可能扰乱源文本中顺序的任何类型的集合。