7

我找不到有关此问题的任何文档。

在某些ListsandMaps中,元素的顺序是随机的,并且与它们添加到列表/映射中的顺序不同。var args 是这样吗,还是按照与发送时相同的顺序接收它们?

例如,我有一个表单验证方法,它接受一个字段名称和一个可变参数规则列表。如果我提供 rules: Rules.INT, Rules.MAX.arg(100),那么我希望在检查规则Rules.INT之前先检查Rules.MAX规则,因为Rules.MAX假定给定值是一个正确的整数。因此,如果Rules.INT失败,则Rules.MAX不会被调用-但是,如果以随机顺序接收可变参数,则无论如何都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.MAXvalidate()

4

1 回答 1

13

所有方法参数都按指定的顺序接收,无论是可变参数还是其他参数。在底层,可变参数是指定参数类型的数组,而不是任何可能扰乱源文本顺序的集合。

于 2013-10-13T09:25:45.120 回答