Ez a cikksorozat a Java 9 újdonságait taglalja. Az első részben elkezdtük megnézni, hogy a Java 9 modul rendszere miért annyira fontos, milyen problémát hivatott orvosolni. Lássuk most hát a részleteket!
A Java 9 modul rendszere (Jigsaw)
A dunsztos üvegektől nincs menekvés
A JAR-ok – vagyis Java ARchive-ok ( = dunsztos üveg) – nem mások, mint lefordított Java osztályok, némi metainformációval ellátva, ZIP-re tömörítve és .jar kiterjesztéssel ellátva.
A Java 9 modul rendszere ezt a struktúrát a metainformációk terén egészíti ki. Ezentúl a moduláris JAR fájlok rendelkezni fognak egy modul leíróval (module-info.class). Ebben a leíróban meghatározhatjuk, hogy ez a modul milyen más modultól függ. Ezt a következő szintaxissal tehetjük meg:
module kocsi { requires motor; }
A kocsi modulunk függ a motor modultól, vagyis ez a kocsi modul nem működőképes motor modul nélkül. Ezt grafikusan a következőképp ábrázolhatjuk:
A requires-ön túl van egy másik kulcsszavunk is, amit használhatunk. Ez a kulcsszó az exports, amivel azt adhatjuk meg, hogy a modulunk melyik csomagja (package-e) érhető el egy másik modulból. Minden, amit nem nevezünk meg az exports kulcsszóval, az alapértelmezés szerint nem exportálódik, vagyis rejtve marad más modulok előtt. Ez megoldja a bevezetőben említett potenciális kódelspagettiasodást. Ha kiegészítjük az előbbi példánkat ezzel, akkor ezt kapjuk:
module kocsi { exports hu.ak.tesla.kocsi; requires motor; }
Mi fog történni a Java core osztályaival?
A jó hír az, hogy ezeket is feldarabolták modulokra, így sokkal könnyebben tudják majd a jövőben kibővíteni. Ez azt is lehetővé teszi, hogy az olyan platformokon, ahol szűkösek az erőforrások – például a mobil alkalmazások – ott az adott platformra fordított kódhoz csak a tényleg szükséges modulokat mellékeljük, ezzel tárhelyet, memóriát, hálózati adatforgalmat, vagy akár akkumulátor energiát is megtakarítva.
Amikor elindítunk egy moduláris Java programot, akkor a requires függőségi lánc mentén a JVM ellenőrzi, hogy minden modul megtalálható-e. Ez sokkal kényelmesebb nekünk, mint a korábbi Java verziókban, amikor a classpath paraméterben az összes függőséget fel kellett kézzel térképeznünk és sorolnunk.
Java modul rendszer konklúzió
Ezen új feature-ök segítségével újonnan írt programjainkban újabb szinten megvalósulhat az OOP egyik alapelve, az egységbezárás (encapsulation), aminek az előnyei régóta jól ismertek.
De mint láthattuk, a JAR-októl nem szabadulunk meg, továbbra is ez lesz a formája a library-k tárolásának, csak kibővítették a leíróképességét, ezzel sok új lehetőséget megnyitva előttünk.
Ebben a blog posztban nem sikerült minden részletre kitérni, mint például a névtelen modulokra illetve az automatikus modulokra. Az említett két kulcsszón kívül vannak még egyebek is, amikkel tovább finomítható a modulok összekapcsolása.
Tanfolyamunkon természetesen gyakorlati példákon keresztül megnézzük a legfontosabb lehetőségeit ennek az új nyelvi elemnek.
Ha szívesen olvasnál még többet a Java 9 modul rendszerről, akkor figyelmedbe ajánlom az angol wiki oldalát.