A Java 21 újdonságai

java 21 újdonságai

Bevezető

Végre eljött az idő, hogy a Java 21 újdonságairól beszélgessünk. Az előző részben a Java 19 újdonságairól tanultunk. A Java 20 új funkcióiról nem írtam külön cikket, mert többségében a korábban bemutatott preview-kat vagy inkubátor státuszban lévő funkciókat vitte tovább. Erre példa a Vector API, a switch-es pattern matching, a record pattern-ök a virtual thread-ek és a structured concurrency. Az egyetlen lényeges és még nem említett dolog a Java 20-ból az úgynevezett scoped variable-ök, amik immutable adatok szálak közötti megosztását teszik lehetővé. Ezt a Thread-Local változók használata is megteszi, viszont nagyszámú virtuális szálak esetén ez lesz az ajánlott módszer.

Nem érted a fenti szöveget?

Azért vagyunk, hogy segítsünk.

A Java 21 viszont nagy örömünkre rengeteg újdonsággal szolgál, és mivel LTS, ezért ennek a cikknek az elolvasására érdemes még a szokásosnál is nagyobb figyelmet szentelni. Miért? Az LTS jelentése long-term support, és ez azt jelenti, hogy ezekre az Oracle vállalja azt, hogy hosszútávú és folyamatos frissítésekkel készül. Éppen ezért az üzleti életben ezeket az LTS verziókat szokták fejlesztésre használni.

Melyek az LTS verziók Java-ban?

Ha hasonló jellegű kérdésed merül fel, az Oracle ezen cikkében választ kapsz a kérdésedre. Az LTS verziók a következők: 8, 11, 17 és a Java 21. A Java 21 után következő LTS verzió a Java 25-ös verziója lesz, amelynek tervezett megjelenése 2025 szeptemberében lesz esedékes.

Record patterns

A record pattern-ek, melyről már sorozatom korábbi cikkében is írtam, a Java 21-ben végre véglegesen bekerültek a Java nyelvbe.

Pattern matching – switch

A Java 17-ben megjelent pattern matching is véglegesen bekerült a Java-ba a Java 21-ben.

String patterns (preview)

String concatenation

Mint ahogy arról korábbi cikkeinkben beszéltünk, a String kompozíció rendkívül fontos eleme a Java-nak, és több String összefűzésének rengeteg módját ismerjük. A teljesség igénye nélkül ismertetek párat:

  • A + operatárorral.
  • A String.format statikus metódus használatával
  • A String class beépített concat() metódusával
  • A StringBuilder, StringBuffer osztályok használatával

Érdekel a Java?

Azért vagyunk, hogy segítsünk.

A Java 21-ben preview-ként bevezetett String pattern egy kicsit más mintát követ, mint a fenti példák: elsőre ránézve olyasmi, mint a String interpolation a C#-ban, de a gyakorlatban egy kicsit máshogy működik és mint később látni fogjuk, másra is jó. Nézzünk egy példát:

String name = "Jane Student";
String school = "A&K Academy";
String course "Junior Java developer";
String welcomeText = STR."Hello \{name}! Welcome to in \{school} in the \{course} course!";

Az STR itt egy úgynevezett template processor. Ha azonban megnézzük a hivatalos dokumentációt, akkor látjuk, hogy az SRT-en kívül egyéb template processzorokat is implementáltak:

  • Az egyik az FMT, ami a java.util.Formatter csomagban megtalálható format specifier-eket és locale information-t is elfogad, a System.out.printf-hez hasonlóan
  • A másik a RAW, amiről részletesebben a dokumentációban olvashatsz

Saját template processor-ok létrehozása

A legérdekesebb funkció az, hogy az itt látható módon a StringTemplate.Processor interfész implementálásával saját template processor-t hozhatsz létre. Az cikkben lévő példában a szerző épp egy JSON processzort hoz létre, amiből ő nem is String-et, hanem egy JSONObject-et hoz létre.

Ha nem érted, mi van ide írva, ne aggódj, a junior kurzusunk pontosan abban segít, hogy minden szükséges ismeretet megszerezz, és Java fejlesztőként helyezkedj el. Ha érdekel, mennyit keres egy Java fejlesztő, ebben a cikkünkben tudsz erről tájékozódni.

Ha lelkes érdeklődő vagy, akit érdekel a szoftverfejlesztés varázslatosan vonzó világa, de nem feltétlenül szeretnél ebben a szakmában elhelyezkedni, akkor ajánljuk neked a népszerű YouTube videókurzusunkat.

Sequenced collection-ök

A Collection Framework, melynek megtanítására tanfolyamainkon hatalmas energiát szánunk, egy meglehetősen jól működő, átgondolt, és a programozói gyakorlatban napi szinten használt elemmé nőtte ki magát.

Ettől még közel sem működött tökéletesen. Nem voltak jelen azok az interfészek, amelyek összefogták volna azokat a collection-implementációkat, amelyek garantálják a sorrendiséget olyan értelemben, hogy biztosan tudjuk, mi az első, a második, az n-edik vagy az utolsó eleme. Ezzel korábban kényelmetlenségek adódtak, mert egy LinkedHashSet első elemét teljesen más módon lehetett meghatározni, mint egy LinkedList-ét. Ez meglehetősen macerás volt bizonyos helyzetekben, nehéz volt rá emlékezni, és igazából utólag visszanézve felesleges is volt.

Éppen ezért volt remek döntés a release notes-ban leírt különböző kritikák, aggodalmak ellenére, hogy a Java 21-et fejlesztők rászánták magukat, hogy interfészekkel egységbe hozzák az ebből a szempontból valóban egységesen viselkedő osztályokat.

Vonz a téma?

Azért vagyunk, hogy segítsünk.

Fontos megemlíteni, hogy mivel Collection-ök a Java 4 óta léteznek, és rengetegen használják másodpercenként is, ezért minden itt történt változtatást eszméletlenül alaposan át kell nézni.

Ezek voltak tehát a Java 21 legfontosabb újdonságai.

Várunk sorozatunk következő résznél! 🙂 Ha egy cikkben szeretnéd látni minden egyes Java verzió újdonságait a Java 4-től kezdve, ide kattintva tudod megnézni.

Szerző: Nagy Csongor