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.