Java haladó szintű lehetőségei Flashcards
Miért problémás hozzáadni új metódust egy interfészhez és mi ennek a megoldása?
Az új metódust minden olyan osztályban implementálni kell ahol az interfész használva van.
Megoldás: Úgy teszik lehetővé az alap és statikus interfészek ezt, hogy automatikusan rendelkezésre állnak minden implementációban. Ezek nem igényelnek módosítást vagy újrafordítást. Ezt bináris kompatibilitásnak nevezik.
Jellemezd a nem absztrakt interfész metódusokat!
Egy default, static vagy private módosítóval és törzzsel ellátott metódus.
Implicit módon mind absztrakt , mely nem rendelkezik default, static vagy private módosítóval.
Az abstract, default és static kölcsönösen kizárják egymást.
A private és mellette vagy abstract vagy default van is hiba.
De lehet egyszerre private és static.
Alapértelmezésben egy metódus egy interfészben default módosítóval deklarált példánymetódus.
A metódustörzs pedig a metódus implementációja, ahol nincs felülírva.
Jellemezd az alapértelmezett metódusokat!
Ha egy interfész kiterjeszt egy alapértelmezett metódust tartalmazó interfészt, akkor:
ha nem említi a metódust, akkor örökli
ha újrdafeiniálja, akkor felülírja
ha absztrakként deklarálja, akkor felülírásra kényszeríti az implementáló osztályokat.
Ha egy osztály implementál alapértelmezett metódust tartalmazó interfészt, akkor:
ha nem említi a metódust, akkor örökli
ha újrdafeiniálja, akkor felülírja
ha absztrakként deklarálja, akkor felülírásra kényszeríti az implementáló osztályokat.(ha az osztály absztrakt)
Jellemezd a statikus interfész metódusokat!
Static módosítóval deklarált metódus. A statikus metódusokat nem öröklik az alinterfészek. Hívásuk egy bizonyos példányra való hivatkozás nélkül történik, osztályok statikus metódusaihoz hasonlóan.
Hiba ha statikus metódus törzsében this vagy super van.
Az interfészhez kötődő segédmetódusok hozzáadását teszik lehetőve.
Jellemezd a privát interfész metódusokat!
Private módosítóval deklarált metódus. Kombinálható staticcal. Nem öröklik az alinterfészek. Az alap metódusok és statikus metódusok közötti kódmegosztásra szolgálnak.
Jellemezd a java.util.Optionalt!
Egy konténer objektum, melyben van egy nem null vagy nincs.
Olyan metódusok visszatérési típusaként használják ahol a nincs eredményt kell ábrázolni és a null hibát okoz.
Optional változó nem lehet null, Optional példányra mutat.
Sorold fel a java.util.Optional metódusait!
Statikus metódusok:
Optional<T> empty() - üres optional példányt ad vissza
Optional<T> of(T value) - visszaad Optional példányt nem null értékkel
Optional<T> ofNullable(T value) - visszaad Optional példányt nem null értékkel ha az nem null, különben üres</T></T></T>
Példánymetódusok:
boolean isPresent() - tartalmaz e értéket
T get() - ha van érték azt, ha nincs NoSuchElementException ad vissza
T orElse(T other) - ha van érték azt, ha nem akkor othert
Jellemezd a funkcionális interfészeket!
Olyan interfész, melynek csak egy absztrakt metódusa van. (SAM - Single Abstract Method). Metódusa az funkcionális metódus. Több statikus/privát metódusa is lehet.
FunctionalInterface annotáció jelzi, hogy funkcionális, de nem kötelező.
Jellemezd a lambda kifejezéseket!
Egy névtelen belső osztályt ábrázolnak, amely egy funkcionális interfészt implementál. A kiértékelése a névtelen belső osztály egy példányát hozza létre.
Szintaxis: (paraméterek) -> {törzs}
Névtelen függvényeket ábrázolnak.
Jellemezd a lambda kifejezések paramétereit!
Paramétereit () között megadott ,-vel elválaszott paraméterlista határozza meg.Ha nincs paraméter akkor a token és a törzs között csak () jelenik meg.
Ha csak egy paramétere van akkor elhagyható a ().
Minden paraméterének egy kikövetkeztetett vagy deklarált típusa van. Hiba ha van mindkettő.
Jellemezd a lambda kifejezések törzsét!
Lehet egy kifejezés vagy egy blokk. Hatáskör szempontjából változatlan. This és super jelentése is változatlan. Egy lokális változó akkor hivatkozható ha final vagy gyakorlatilag final (egyszer kap értéket, többet soha a lambda kifejezésben).
A lambda kifejezés kiértékelése nem eredményezi a törzs kiértékelését.
Hibát jelent ha lambda kifejezés értékadástól, hívástól vagy típuskényszerítéstől más környezetben fordul elő.
Jellemezd a metódus referenciákat!
Metódushívásra hivatkozunk tényleges hívás nélkül. Egyes esetekben osztálypéldány vagy tömb létrehozást is tudunk úgy kezelni, mintha azok metódushívások lennének.
Egy metódus referencia kifejezés kiértékelése egy funkcionális interfésztípus egy példányát hozza létre. A végrehajtás később történik.
Hibát okoz ha a metódus referencia kifejezés értékadástól, hívástól vagy típuskényszerítéstől eltérő bármely más helyzetben fordul elő.
Mikor több metódusnak ugyanaz a neve, vagy egy osztálynak több konstruktora van akkor a metódus referencia kifejezés által lesz kiválasztva.
Mik a streamek?
Elemek egy sorozata, melyen műveletek végezhetők.
java.util.stream.Stream<T> interfész ábrázol egy streamet.</T>
Miben térnek el a streamek a kollekcióktól?
Nincs mögöttük tárhely: nem tárol, hanem továbbít elemeket
Funkcionális természetűek: egy művelet eredményt hoz le, nem módosítja a stream forrását.
Nem feltétlenül korlátosak: nem véges méretűek, a rövidzár műveletek végtelen streamekent történő véges számításokat tesznek lehetővé.
Fogyaszthatók: elemei csupán egyszer kerülnek meglátogatásra a stream élete során
Hogy lehet streameket létrehozni?
Kollekciókból: stream() és parallelStream() metódusokkal
Tömbökből: java.util.Arrays stream gyártó metódusával
Egyedi objektumokból: java.util.Stream. of(T t) és of(T values) metódusokkal és builder() metódus által visszaadott Stream.Builder objektummal
Java SE osztály által:
java.io.BufferedReader: a lines() és java.lang.String: a lines() metódus a sorok streamjét adja vissza