Java SE/JDK új lehetőségei Flashcards
Mi az előzetes lehetőség és milyen lehet?
Java nyelv, virtuális gép vagy a Java SE API egy új lehetősége, mely pontosan meghatározott, teljesen implementált de még nem végleges.
Lehet: előzetes nyelvi lehetőség, előzetes VM lehetőség vagy előzetes API-l.
Nem lehet kísérleti, kockázatos, hiányos vagy instabil.
Jellemezd a lokális változó típus kikövetkeztetést!
A nem null kezdőértékű lokális változók típus megadása var azonosítóval is deklarálhatók. Fordítási időben következteti ki a típust. A var azonosító nem kulcsszó, hanem fenntartott típusnév.
Használható a var:
inicializált lokális változóknál
for-each ciklus indexeiben
Hagyományos for ciklusban deklarált változókban
try-with-resources utasításban
Jellemezd a lokális változó szintaxisát lambda paraméterkhez!
var fenntartott típusnév használható lambda kifejezések paraméterinek deklarásához (var x, var y) -> x.process(y)
Ez által lehet annotációkat is használni, ez kötelező minden elemhez, vagy tilos bármelyikhez is
(@NonNull var x, @Nullable var y) -> x.process(y).
Jellemezd a Swtich kifejezéseket!
A switch használható utasításként és kifejezésként is. Mindkét esetben van case címke (áteséses és anélküli). Továbbá rendelkezésre áll egy “yield” utasítás, mely által értéket ad vissza a switch kifejezés.
Egy switch kifejezés vagy normális módon egy értékkel kell lezárulnia, vagy kivétellel.
Jellemezd a switch címke szintaxisát!
Új forma a case … ->, melyben megadható egy elem, vagy vesszővel elválasztott elemek, a jobb oldalán pedig kifejezés, blokk, vagy throw engedélyezett. Ha illeszkedik akkor nincs átesés.
var s = switch (items.size()) {
case 0 -> “no items”;
case 1 -> “only one item”;
default -> String.format(“%d items”);
}
Címkéit kimerítő módon kell felsorolni, azaz minden lehetséges esetre kell valami illeszkedjen. Szükséges egy default záradék, kivétel ha az enum konstans minden elemét lefedi.
Hogy használjuk switchben a yield utasítást?
Akkor kerül használatra, mikor a switch egy értéket ad vissza. A yield nem kulcsszó, hanem korlátozott azonoító.
int j = switch (day) {
—-case MONDAY -> 0;
—-case TUESDAY -> 1;
—-default -> {
——–int k = day.toString().length();
——–int result = f(k);
——–yield result;
—-}
};
Jellemezd a szövegblokkokat!
Többsoros string literál, bárhol használható ahol a string literál.
var html = “””
line 1
line 2
line 3
“””
Jellemezd a mintaillesztést az instanceof operátorhoz!
Komponensek objektumból történő feltételes kinyerésének tömörebb és biztonságosabb kifejezését segítik elő.
A minta szerkezete:
Célra alkalmazható predikátum vagy teszt
Minta változóknak nevezett változók egy halmaza, melyek csak a predikátum teljesülésekor kerülnek kinyerésre.
if (obj instanceof String s) {
// …
}
Egy típust meghatározó predikátumból és egy minta változóból áll.
Jellemezd a mintaillesztés határkörkezelését (flow scoping)!
Egy minta változó határköre a program azon pontjaira terjed ki, ahol a mintaillesztés sikeres és változó értéket kap vissza.
Fordítási hibát okoz egy olyan változóra való hivatkozás melyre nem teljesül a mintaillesztés.
Jellemezd a rekordokat!
Nem módosítható adatokat becsomagoló osztályok.
Rögzített értékek halmaza.
Jellemezd a lezárt osztályokat és interfészeket!
Megszabhatják, mely osztályok vagy interfészek terjeszthetik ki őket. Olyan osztályhierarchiát is lehet deklarálni, mely nem nyitott a tetszőleges osztályok általi kiterjesztésre. sealed módosíthatóval lehet lezárni. permits záradék adja meg azon osztályok nevét melyek kiterjeszthetik.
Milyen megszorításokat szab a lezárt osztály az alosztályokra?
Ugyanahhoz a modulhoz kell a lezárt és az alosztály tartozzon. Ha névtelen a modul, akkor csomaghoz.
Közvetlenül kell kiterjeszteni a lezárt osztályokat.
A megengedettekhez meg kell adni azt leíró módosítót:
final: nem terjeszthető ki
sealed: csak megengedett alosztályok terjeszthetik ki
non-sealed: bárki kiterjesztheti
Jellemezd a mintaillesztést switch-hez!
Mintás casekben a kiválasztást a mintaillesztés határozza meg egyenlőség vizsgálat helyett.
Az őrzött minta címke (guarded pattern label) p when e formájú, ahol p egy minta e pedig logikai kifejezés. Egy érték illeszkedi p when e őrzött minta címkére, ha illeszkedik a p mintára és e értéke igaz. Ha nem illeszkedik p-re akkor az e nem kerül kiértékelésre.
Sorold fel a főbb tervezési kérdéseket, amikor a case címkék lehetnek minták!
Kibővített típusellenőrzés
Switch kifejezés és utasítás teljessége
Null kezelése
Minta változó deklaráció hatásköre
Hibák
Jellemezd a kibővített típusellenőrzést!
Kibővül a szelektor kifejezések típusa, lehet egész primitív (kivéve long) vagy pedig referencia típus.
Egy case p alakú minta címke dominál egy case p when e alakú minta címkét, azaz az eredeti egy őrzött verzióját.
Dominálhat konstans case címkét, pl case Integer i dominálja a case 42
Akkor dominál, ha az őrfeltétel nem kerül ellenőrzésre.