2013-10-13 24 views
5

Bu konuda herhangi bir belge bulamıyorum. Bazı Lists ve Maps öğelerinde, öğelerin sırası rasgeledir ve listeye/haritaya eklendikleri sırayla aynı değildir.Var args hakkında doğru mu, yoksa gönderildikleri sırayla mı alınıyorlar?Java varargs'ları, verildikleri sırayla alındı ​​mı?

Örneğim, bir alan adı ve bir kural listesi içeren bir form doğrulama yöntemine sahibim. Rules.INT, Rules.MAX.arg(100) kurallarını sağlarsam, Rules.MAX kuralı kontrol edilmeden önce Rules.MAX kuralının kontrol edilmesinden önce Rules.INT kuralının kontrol edilmesini isterim çünkü Rules.MAX verilen değerin düzgün bir tamsayı olduğunu varsayar. Bu nedenle, Rules.INT başarısız olursa, Rules.MAX çağrılmayacaktı - ancak varargs rastgele bir sırada alınırsa, Rules.MAX zaten Rules.INT önce çağrılabilir ve değer tamsayı değilse bir istisna atar, Ben istemiyorum.

Düzenleme: Bu yöntem denilen eğer,

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

Şimdi:: validate("age", Rule.INT, Rule.MAX.arg(100)) yılında Rule.MAX önce Rule.INT kontrol/iterated emin olabilir İşte benim yöntem açıklama için, var args ile var validate() yöntemi?

+1

Yanıt ilginizi çekebilir –

+1

Cevabım evet, çünkü "Kural ..." eşdeğerdir "Kural []" ile aynı veri türü - yani sipariş ile bir dizi. – vikingsteve

+0

Cevap evet. Java, etrafındaki yöntem argümanlarını karıştırmaz. –

cevap

7

Tümü yöntem argümanları, varargs veya başka bir şekilde belirtilen sıraya göre alınır. Kapağın altında, bir varargs parametresi, belirtilen bağımsız değişken türünün bir dizisidir, kaynak metindeki sırayı bozabilecek herhangi bir koleksiyon değildir.