A Java 17 újdonságai
Table of Contents
Sorozatunk előző részében a Java 16 újdonságaival foglalkoztunk. Elérkeztünk Java sorozatunk következő részéhez, amelyben a Java 17 nyelvi újdonságait vesszük szemügyre. A Java 17 feature-eit / újdonságait mindenképp érdemes tanulmányozni, hiszen a Java 17 LTS verzió – éppen ezért ez sokkal nagyobb figyelmet kap a közösség és az interjúztatók részéről is, mint egy nem LTS Java verzió.
Ha nincs sok időd, és egy cikkben szeretnéd látni minden egyes Java verzió újdonságait a Java 4-től kezdve, ide kattintva tudod megnézni.
Sealed class-ok
Hurrá! A Java 15-ben előzetesen bemutatott sealed class-ok véglegesen a nyelv részévé váltak! Ha szeretnéd megérteni, hogy mik azok a sealed class-ok, olvasd el a Java 15-ről korábban írt összefoglalónkat.
Ha nincs időd elolvasni a korábbi, részletes verziót, akkor röviden a sealed class-ok lehetővé teszik, hogy meghatározzuk, mely osztályok örökölhetnek egy adott osztályt vagy valósíthatnak meg egy interfészt. Ez javítja a kód fenntarthatóságát, mivel csökkentjük a lehetséges konkrét megvalósítások számát, és kiszámíthatóbbá tesszük az osztályhierarchiát.
Pattern matching switch-csel (előzetes)
Ez a funkció kibővíti a switch
utasítást a mintaillesztéssel. Ez tisztább, olvashatóbb kódot tesz lehetővé, különösen akkor, ha különböző típusú objektumokat kell kezelni a switch
kifejezésben. A mintaillesztés switch
-hez még előzetes verzióban van, később fogják véglegesíteni. Itt egy nagyon egyszerű metódus, ami bemutatja ennek az új szintaxisnak a használatát:
static void switchExpressionsExample(Object obj) {
switch (obj) {
case String s -> System.out.println("Szöveg: " + s);
case Integer i -> System.out.println("Egész szám: " + i);
default -> System.out.println("Ismeretlen típus");
}
}
Korábban ugyanezt a logikát csak jóval körülményesebben, if-else blokkokkal és rengeteg cast-olással tudtuk volna megírni valahogy így:
public static void typeCheckWithoutSwitchExpressions {
Object obj = "Ez egy szöveg";
if (obj instanceof String) {
String s = (String) obj;
System.out.println("Szöveg: " + s);
} else if (obj instanceof Integer) {
Integer i = (Integer) obj;
System.out.println("Egész szám: " + i);
} else {
System.out.println("Ismeretlen típus");
}
}
Tanulnál erről bővebben?
Azért vagyunk, hogy segítsünk.
Könnyű belátni, hogy az új, switch-es pattern matching módszer sokkal olvashatóbb, érthetőbb, könnyebben bővíthető és rugalmasabb megoldást jelent, éppen ezért ha Java 17+-os projekten dolgozol, mindenképp javasoljuk ennek a használatát.
UTF-8 alapértelmezett karakterkészletként
A Java 17-ben az UTF-8 lett az alapértelmezett karakterkódolás a Java API-k számára, ami javítja a különböző platformok közötti konzisztenciát, mivel az UTF-8 széles körben használt az internalization (röviden: i18n) során.
Továbbfejlesztett pszeudo-random generátorok
A Java 17-ben bevezetésre került a továbbfejlesztett pszeudo-véletlenszám-generátorok (PRNG-k) rendszere a JEP 356 részeként. Ez az újítás nagyobb rugalmasságot, jobb minőségű véletlenszám-generálást és szélesebb algoritmusválasztékot kínál a Java véletlenszám-generálási keretrendszerében.
Új interfész: RandomGenerator
Ennek a fejlesztésnek a központi eleme a RandomGenerator
nevű új interfész bevezetése. Ez az interfész egységesíti a különböző véletlenszám-generátor (RNG) implementációkat egy közös API alatt, így könnyebbé téve a használatukat és testreszabásukat. Az interfész főbb metódusai:
int nextInt()
long nextLong()
double nextDouble()
void nextBytes(byte[] bytes)
A RandomGenerator
interfészt minden standard RNG megvalósítja, beleértve a java.util.Random
-ot, a ThreadLocalRandom
-ot, és a Java 17-ben bevezetett új generátorokat is.
Új RNG algoritmusok
A Java 17 több új algoritmust vezetett be a véletlenszám-generáláshoz (angolul a véletlenszám-generátorokat random number generator-öknek, azaz RNG-knek hívjuk), amelyek szintén implementálják a RandomGenerator
interfészt. Ezek az új algoritmusok kifejezetten teljesítményre, véletlenszám-minőségre és kriptográfiai erősségre lettek optimalizálva:
- L64X128MixRandom: Egy nagy teljesítményű generátor, amely az „LXM” családon alapul, kombinálva lineáris kongruens generátorokat (LCG) és xorshift technikákat.
- L64X256MixRandom: Az előző algoritmus egy változata nagyobb állapotmérettel.
- L64X1024MixRandom: Egy változat, amely még nagyobb állapotméretet kínál.
- L128X128MixRandom: Egy másik LXM variáns eltérő állapotmérettel.
- L128X256MixRandom: Hasonló a
L128X128MixRandom
-hoz, de nagyobb véletlenszerűséget és állapotméretet biztosít.
Ezek az algoritmusok jobb minőségű véletlenszerűséget és jobb teljesítményt biztosítanak a hagyományos java.util.Random
-hoz képest.
Érdekel az RNG?
Azért vagyunk, hogy segítsünk.
Stream support a véletlen számokhoz
Az új generátorok támogatják a véletlen számok streamként történő létrehozását a RandomGenerator
interfész segítségével. Például készíthetünk IntStream
-et, DoubleStream
-et vagy LongStream
-et a funkcionális programozásban való felhasználáshoz.
Összefoglalva tehát a Java 17 rengeteg újdonsággal könnyíti meg a fejlesztők életét, és eszméletlenül nagy segítséget tud nyújtani abban, hogy tisztább, hatékonyabb és olvashatóbb kódot írjunk.
Ingyenes, 200 részes YouTube-sorozatunk sokat segít neked a programozás alapjainak elsajátításában, tanfolyamainkon pedig mindig odafigyelünk arra, hogy figyelemmel kövessük az összes fontos új nyelvi elemet, és piacképes, XXI. századi tudást adjunk a kezedbe.
Köszönjük, hogy velünk tartottál, várunk sorozatunk következő részében!
Szerző: Nagy Csongor