8 Java beágyazott osztályok és lambda kifejezéseket

A beágyazott osztály egy osztály tagja, amely be van ágyazva. Belső osztályok férhetnek hozzá a tagjai az osztály, amelyben a beruházás, akkor is, ha ezek a kifejezések nyilvánították a módosító magán. Ehhez a fordító létrehoz egy speciális hozzáférési módszerek ezekre a területekre, hogy a virtuális gép önmagában nem sérti az elvek a PFSZ.

Mivel az osztály tagjai beágyazott osztályok lehet nyilvánítani a kulcsszó magán. védett. nyilvános hozzáférés vagy anélkül módosító (package-magán).

Külső osztály (OuterClass) csak állami vagy csomag-magán!

Miért érdemes beágyazott osztályok

Az okok a beágyazott osztályok Java:

  • Logikai csoportosítás osztályok, amelyek kizárólag arra használjuk, egy helyen. Ha az osztály csak egy másik osztályba, akkor van értelme, hogy azt az osztályt, hogy jelezze a kapcsolatukat.
  • A növekedés a tokozás. Ha B. osztályú alkalmazni kell az osztály tagjai A., amelyek egyébként bejelentett magán. van értelme befektetni egy osztály B osztály A. mivel ezek a tagok lehet nyilvánítani magán. de a B érheti őket. Emellett B rejtve maradhat a külvilágtól.
  • Relief olvasni és fenntartása kódot. Kis osztályok lehet ágyazni külső osztályok, közelebb a felhasználás helyén.

Statikus beágyazott osztályok

Statikus beágyazott osztályok társított külső osztály, valamint módszerek és változók.

És csakúgy, mint a statikus módszerek nem tudnak hozzáférni a példány változók és metódusai a külső osztály, amelyben a befektetett közvetlenül tudnak hivatkozni rájuk csak egy objektum referenciát. Miután egy hivatkozást az objektumra hivatkoznak egy példányát tagja a külső osztály, függetlenül azok hozzáférési módosítót.

Statikus beágyazott osztályok elérheti a statikus tagok egy osztályt, ahol be vannak ágyazva, bármilyen hozzáférési módosítót.

Ezek a belső osztályok általában általában logikailag kapcsolódik a külső osztály. Úgy van, hogy minden területen a külső osztályban. Példányai ezen osztályok lehet létrehozni benne a külső osztály, és ha megfelelő szintű hozzáférést, más osztályokba más csomagokban.

Nem statikus beágyazott osztályok, amelyek tagjai egy osztály lehet nyilvánítani bármelyik módosító magán. védett. köz- vagy anélkül módosító (package-magán).

helyi osztályok

A helyi osztály egy osztály, amely nem tagja egyetlen más osztály, és egy nevet.

Helyi osztályok nem rendelkezik hozzáféréssel módosítók: nem magán. sem védett. sem nyilvánosak.

névtelen osztály kifejezést a következőkből áll:

  • új műveletet.
  • Interfész név eladó vagy a szülő osztályban. Ez a példa MyInterface felület.
  • Konzolok érveket a mikrotörzs kivitelező. Egy névtelen osztály nem nyilvánítja a testében új tervezők, mivel nem volt neve.
  • Az osztály test.

Egy névtelen osztály nem lehet elvont (absztrakt osztályok később tárgyaljuk).

Egy névtelen osztály mindig implicit végleges.

Anonymous osztályok elérheti a változókat a módszer, amelyben kijelentette, ha ezek deklaráljuk véglegesnek. vagy azok a végleges jogszabály, amely tulajdonképpen nem változott.

árnyékoló változók

Ha egy változó neve bármely területén ugyanaz a neve, mint a változó külső területen, akkor ez a változó árnyékok (árnyék) a változó külső területen. Nem lehet hivatkozni a változó a külső térségben csak név szerint. Az alábbi példa bemutatja, hogyan érhető el az árnyékos változó:

Ebben a példában, a paraméter X method1 módszer elfedi az osztály tagja SecondInnerClass. és x x SecondInnerClass árnyalatú FirstInnerClass. és x x a FirstInnerClass bezárja ShadowClass rendre.

Megjegyzés a hivatkozás x különböző szintek száma osztályok (x. Ez. X. SecondInnerClass. Ez. X).

lambda kifejezések

Gyakran névtelen osztály megvalósítja az interfészt, amely csak egy absztrakt módszer. Ebben az esetben írhat kódot még röviden és világosan, ha egy lambda kifejezés.

A felület, amely csak egy absztrakt módszer az úgynevezett funkcionális interfészt. A funkcionális interfész is tartalmazhat tetszőleges számú statikus módszerek és az alapértelmezett módszerek. További részletek interfészek lesz szó a megfelelő cikket.

Lambda kifejezés alkotja:

  1. A listát a formális paraméterek, vesszővel elválasztva, és zárójelbe téve. Ha a formális paraméter csak egy van, a zárójelben lehet hagyni. Ha nincs formális paraméterek, akkor használják csak üres zárójelek. Típusa hivatalos szereplők megadható, de nem feltétlenül.
  2. Token nyíl ->.
  3. A test áll egy operátor / utasítás vagy egy blokk nyilatkozatok / utasításokat. Abban az esetben, egy blokk nyilatkozatok és módszer eredményeit más, mint a void visszatérési értéke, használd a visszatérés. Amennyiben az eredmény a lambda kifejezés az eredménye ez a kifejezés. kezelő egység lehet üres.

Ez lesz a fordítási hiba, mert az x változó már bejelentették a környéken.

Eredmény típusú lambda-kifejezés, amit várhatóan ezen a ponton, így lambda kifejezéseket csak akkor lehet használni, ha a Java fordító tudja határozni saját típusa:

Lambda kifejezések szerializálódnak, ha ő érveit, és az eredményt sorba, de olyan szigorúan nem ajánlott.

Néhány funkcionális kapcsolódási pontok java csomagot. util. funkció:

fogyasztó - az egyik eljárás magában foglalja egy tárgy, mint a paraméter, hogy az eljárás eredmény nélkül.

függvény - az egyik eljárás magában foglalja egy tárgy, mint a paraméter, amely visszaadja másik tárgya ennek eredményeként.

állítmány - az egyik módszer egy olyan objektumot tartalmaz, mint a paraméter, amely visszaadja az eredményt a logikai.

szállító - magában foglal egy eljárást paraméterek nélkül, amely visszaadja az objektumot.

Hivatkozások módszerek

Ha egy lambda kifejezés végez csak a hívás egy bizonyos módszer, illetve a kivitelező, akkor a hivatkozás a módszert használja.

Mikor kell használni beágyazott osztályok, helyi osztályok, névtelen osztályok, lambdas

Helyi osztályok. Ha szeretné, hogy több mint egy objektumpéldányt használja a kivitelező, vagy szándékozik bevezetni egy új nevű típusát.

Névtelen osztályok. ha kell mezőket vagy extra módszerekkel.

Használata lambda kifejezéseket. ha szüksége van egy példányt a funkcionális felület, vagy ha megy át az egyik fellépés egy másik módszer, például egy eseménykezelő.

Az egymásba ágyazott osztályban. Ha ugyanazok a követelmények a helyi osztály, de azt szeretné, hogy minél szélesebb körben elérhetővé. Ha hozzá szeretne férni a változók a külső osztály, ahol nem-statikus beágyazott osztály (belső osztályok), egyébként statikus beágyazott osztály.

További bejegyzések ebben a szakaszban:

Sok nehéz, de megvalósítható. Csak akkor van szükség, hogy lakjanak rajta egy kezdő, vagy jöjjön ide vissza akkor? (Tudom AsctionScript 3)
=
Egy másik pont: Azt olvastam, hogy belső osztályok szoros kapcsolatban állnak az események Java. Ebben a fejezetben egy szót róla. És valóban a listán a cikkek Java nincs ilyen cikket «Java 8 eseményeket.”
Bár lehet, hogy én nem értettem rendesen.

Kapcsolódó cikkek