Bir yöntem için Java değişken numarası veya bağımsız değişkenler


151

Değişken sayıda parametreye izin verecek bir yöntem bildirmek mümkün müdür?

Yöntemin değişken sayıda parametreye izin vermesi gerektiğini belirten tanımda kullanılan sembolizm nedir?

Cevap: varargs


12
Ev ödevi olduğu için sorunuzu bilmek istemiyoruz, sadece öğrendiğinizi bilmek istiyoruz.
HDave

Yanıtlar:


278

Bu doğru. Varargs'daki Oracle kılavuzunda bununla ilgili daha fazla bilgi bulabilirsiniz .

İşte bir örnek:

void foo(String... args) {
    for (String arg : args) {
        System.out.println(arg);
    }
}

hangisi olarak adlandırılabilir

foo("foo"); // Single arg.
foo("foo", "bar"); // Multiple args.
foo("foo", "bar", "lol"); // Don't matter how many!
foo(new String[] { "foo", "bar" }); // Arrays are also accepted.
foo(); // And even no args.

1
Çeşitli tipte parametreler yapmak mümkün mü? örneğin (String ... strs, int ... ints). Herhangi bir sırayla herhangi bir argüman türünden ne haber?
trusktr

5
@trusktr: Herhangi bir nesne istiyorsanız, sadece kullanın Object....
BalusC

2
@trusktr Hayır, ilkeller nesne değildir. Burada farkın harika bir açıklaması var: programmerinterview.com/index.php/java-questions/…
Dick Lucas

5
@Richard: Kullanımı otomatik kutulama Object... argsnedeniyle ilkellerle çalışacaktır .
Sumit

1
@StevenVascellaro: Argümanların bir dizi gibi işlendiğini varsayıyorum, bu yüzden muhtemelen basitçe yapabilirsinizvarargs.length
LMD

15
Variable number of arguments

Bir yönteme değişken sayıda argüman iletmek mümkündür. Ancak bazı kısıtlamalar vardır:

  • Değişken sayıdaki parametrelerin tümü aynı türde olmalıdır
  • Yöntem içinde bir dizi olarak ele alınırlar
  • Yöntemin son parametresi olmalılar

Bu kısıtlamaları anlamak için, aşağıdaki kod parçacığında bir tamsayı listesindeki en büyük tamsayıyı döndürmek için kullanılan yöntemi göz önünde bulundurun:

private static int largest(int... numbers) {
     int currentLargest = numbers[0];
     for (int number : numbers) {
        if (number > currentLargest) {
            currentLargest = number;
        }
     }
     return currentLargest;
}

kaynak Oracle Certified Associate Java SE 7 Programcı Çalışma Kılavuzu 2012


15

Evet mümkün:

public void myMethod(int... numbers) { /* your code */ }

10

Farklı argüman türleri için 3 nokta vardır :

public void foo(Object... x) {
    String myVar1  = x.length > 0 ? (String)x[0]  : "Hello";
    int myVar2     = x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
} 

O zaman ara

foo("Hii"); 
foo("Hii", 146); 

güvenlik için şu şekilde kullanın:
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }

Bu yaklaşımın ana dezavantajı, isteğe bağlı parametreler farklı türdeyse statik tür denetimini kaybetmenizdir. Lütfen daha fazla varyasyona bakın .



0

Evet Java, vargsyöntem parametresine izin verir .

public class  Varargs
{
   public int add(int... numbers)
   int result = 1for(int number: numbers)
      {
         result= result+number;  
      }  return result; 
   }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.