2013-10-13 34 views
5

我找不到有关此问题的任何文档。Java可变参数是按照它们的相同顺序接收的吗?

在某些ListsMaps中,元素的顺序是随机的,并且与添加到列表/地图的顺序不同。这是真的关于var args,还是他们收到的顺序是相同的?

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

编辑:这是我的方法与变参,为澄清:现在

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()方法?

+1

我会感兴趣的回答 –

+1

我认为答案是肯定的,因为'Rule ...'与Rule []'的数据类型是相同的数据类型 - 也就是一个数组,具有排序。 – vikingsteve

+0

答案是肯定的。 Java不会混淆方法论点。 –

回答

7

全部方法参数以指定顺序接收,无论是可变参数还是其他值。在引擎盖下,一个varargs参数是一个指定参数类型的数组,而不是任何类型的集合,这可能会扰乱源文本中的顺序。

相关问题