Java 2 Útikalauz programozóknak 5.0

Az elte.java2_utikalauz5.vararg csomag

A Változó argumentumszámú metódusok fejezet példaprogramjai.

Tovább lásd:
          részletes leírás

package elte.java2_utikalauz5.vararg

A Változó argumentumszámú metódusok fejezet példaprogramjai.

A Java 5.0 verziójában jelent meg az előre nem rögzített számú argumentummal rendelkező metódusok (variable arity parameters, varargs) írásának lehetősége. Ha korábban arra volt szükség, hogy egy metódusnak különböző számú paramétert adhassunk át, megoldhattuk ezt a metódus túlterhelésével, vagy a paraméterek tömbbe csomagolásával. Mint látni fogjuk, az új nyelvi elem is ezekre a módszerekre épít.
Tartalomjegyzék a hivatkozott referenciákkal és felhasznált képekkel:
Korábbi módszerek
static void üdvözöl(String név) {
    System.out.println("Szia "+név+"!");
}
static void üdvözöl(String név1, String név2) {
    System.out.println("Szia "+név1+" és "+név2+"!");
}
üdvözöl("Anna");
üdvözöl("Anna", "Béla");

static void üdvözöl(String[] nevek)
    for(int i : nevek) System.out.println("Szia "+nevek[i]+"!");
}
String[] névsor = {"Anna", "Balázs", "Csaba"};
üdvözöl( névsor );
Az új szintaktikai elem
static void üdvözöl(String... nevek) {
    for(int i=0; i

static void f(String s, char c, int... i) {}
f("alma",'z');
f("körte",'v',1);
f("szilva",'u',1,2);
Kapcsolat a tömb típusú argumentumokkal
üdvözöl(new String[] {"Anna", "Balázs", "Csaba"});
Túlterhelés
static void kiír(int... számok) {
    System.out.print("Számok: ");
    for(int szám: számok) System.out.print(szám+" ");
    System.out.println();
}
static void kiír(int szám) {
    System.out.println("Egy argumentum...");
}
kiír(); // Számok:
kiír(1); // Egy argumentum...
kiír(1,2); // Számok: 1 2
kiír(new int[] {1}); // Számok: 1
Hibalehetőségek
static int max(int első, int... többi) {
    int max = első;
    for(int i: többi) if(max < i) max = i;
    return max;
}

// Veszélyes megoldás!
static int max(int... számok) {
    int max = számok[0];
    for(int i: számok) if(max < i) max = i;
    return max;
}
int maximum = max(adatok);

static int max(int... számok) {
    if(számok.length==0) throw new IllegalArgumentException("Üres számsorozat");
    int max = számok[0];
    for(int i: számok) if(max < i) max = i;
    return max;
}

static void leír(Object arg) {
    System.out.println(arg.getClass());
}
Object obj1 = "egy";
Object obj2 = new Integer(1);
Object[] obj3 = {"egy","kettő","három"};
leír(obj1); // eredmény: class java.lang.String
leír(obj2); // eredmény: class java.lang.Integer
leír(obj3); // eredmény: class [Ljava.lang.Object;

static void listáz(Object... args) {
    for(Object arg: args) System.out.println(arg.getClass());
}
listáz(obj1, obj2, obj3);
listáz(obj3); // eredmény: class java.lang.String 3* egymás után!
listáz((Object)obj3); // Egyetlen tömb objektumként.
listáz((Object[])obj3); // Három String értékként.
Egy alkalmazás: printf
printf(String format, Object... args);
for(int i=1; i<3; ++i) System.out.printf("%d gyöke %f\n",i,Math.sqrt(i));
Calendar cal=Calendar.getInstance(TimeZone.getDefault());
System.out.printf("Most %1tY év %1tm hónap %1td napján %1tH:%1tM van.%n",
    cal.getTime()); //eredmény: Most 2008 év 10 hónap 22 napján 15:14 van.

Szerző:
Dévai Gergely
Forrásfájl:
package-info.java

Java 2 Útikalauz programozóknak 5.0