Csomagoló típusok Javában

Kategória: Standard Java.

A Java 5-ben megjelentek a Java-ban az ún. csomagoló (wrapper) típusok. Ezek olyan osztályok, amelyek egy primitív típust tartalmaznak, valamint hozzá tartozó műveleteket. Pl. az Integer osztály int-et tartalmaz, a Double egy double-t stb. Ez a következő előnyökkel jár:

  • Segítségével tudjuk jelezni azt, hogy egy adat hiányzik. Primitív típusok esetén ez gyakran problémához vezetett. Ott gyakori megoldás volt pl. az, hogy a 0 jelezte az adat hiányát, de ha az egy elképzelhető érték volt (pl. emberek száma), akkor egy olyan értéket kellett használni, ami egyértelműen nem lehet valódi (pl. -1). Viszont ez csökkentette a kód olvashatóságát, valamint hibákhoz is vezethetett (gondoljunk pl. arra, hogy összeadjuk az emberek számát, de elfelejtjük kezelni a -1-et). A csomagoló osztályok esetén a null érték jelzi azt, hogy az adat hiányzik.
  • Számos műveletet tudunk segítségével végrehajtani, amit esetleg felül is tudunk definiálni.

A Java-ban létezik az ún. autoboxing, ami azt jelenti, hogy szükség esetén a rendszer automatikusan átkonvertálja egyik típusból a másikba, pl. int-ből Integer-be (pl. egy paraméter átadásakor, ha a meghívandó függvény Integer-t vár), vagy Integer-ből int-be (pl. egy művelet végrehajtásakor).

Lássunk egy példát!

// Main.java
public class Main {
    public static void main(String[] args) {
        int a = 5;
        Integer b = new Integer(a);
        Integer c = 3;
        System.out.println(b + c + 2);
    }
}

A b változó létrehozása a "gyalogos" módszer: átadjuk az Integer osztály konstruktorának a paramétert. A c megadásánál kihasználtuk az autoboxingot: ott a fordító automatikusan becsomagolja nekünk a 3-at. A kiírásnál ismét kihasználtuk az autoboxingot, de most a másik irányba: ott automatikusan meghívja a fordító az intValue() függvényt, ami visszaadja a becsomagolt értéket, így az összeadás eredménye 10 lesz.
A példából is látszik, hogy végső soron ugyanúgy használhatjuk a becsomagolt típusokat mint a primitíveket, viszont azzal az előnnyel jár, hogy hiányzó adat esetén megadhatunk neki null értéket.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License