Programovanie

Vnorenie pomocou rozhraní Java

Ak ste čítali moje Java 101 tutoriál zavádzajúci statické triedy a vnútorné triedy, mali by ste byť oboznámení so základmi práce s vnorenými triedami v kóde Java. V tomto tipe pre Java sa dozviete tri bežné spôsoby, ako používať techniky vnorenia s rozhraniami Java. Stručne tiež ukážem vnorené rozhrania pomocou statických metód, známych aj ako rozhrania statických metód.

Viac informácií o rozhraniach Java

Úvod do rozhraní Java, vrátane rozdielov medzi triedami a rozhraniami, nájdete na mojej webovej stránke Java 101 tutorial Práca s rozhraniami v Jave.

Vnorené rozhrania v triedach

Java vám umožňuje deklarovať rozhrania vo vnútri tried. Po deklarácii je rozhranie automaticky statickým členom triedy. Nie je potrebné deklarovať rozhranie s statický kľúčové slovo. Uvažujme o nasledujúcom príklade:

 trieda EnclosingClass {rozhranie EnclosedInterface1 {} statické rozhranie EnclosedInterface2 {}} 

Uzavreté rozhranie1 a Uzavreté rozhranie2statické členské rozhrania. Neexistuje ekvivalent miestnych tried, pretože rozhrania nemožno deklarovať v blokoch. Rozhrania sa však dajú použiť v anonymných kontextoch triedy.

Na vnorené rozhrania sa zvyčajne nepristupuje nad rámec ich priložených tried. Inak by ste ich mohli vyhlásiť za rozhrania najvyššej úrovne. Namiesto toho sú prístupné z vnútra svojich priložených tried, ako je to demonštrované tu:

 trieda EnclosingClass {interface EnclosedInterface1 {} statické rozhranie EnclosedInterface2 {} statická trieda EnclosedClass1 implementuje EnclosedInterface1, EnclosedInterface2 {} trieda EnclosedClass2 implementuje EnclosedInterface1, EnclosedInterface2 {} void m () {trieda EnclosedClass3 implementuje EnclosedClass3 implementuje EnclosedClass3 }} 

Všimnite si, že statická trieda členov Uzavretá trieda1, nestatická trieda členov EnclosedClass2a miestna trieda Uzavretá trieda3 implementovať obe vnorené rozhrania. V kontexte anonymnej triedy je však možné implementovať iba jedno rozhranie. (Viac anonymných tried nájdete v časti Statické triedy a vnútorné triedy v Jave.)

Triedy s vnorenými rozhraniami v java.net

Štandardná knižnica tried Java obsahuje triedy s vnorenými rozhraniami. Napríklad, InetAddress (v java.net balíček), ktorý predstavuje adresu internetového protokolu, vyhlasuje za súkromnú Adresy rozhranie, ktoré je implementované súkromne CachedAddresses a NameServiceAddresses triedy statických členov. Deklaruje tiež súkromie NameService rozhranie, ktoré je implementované súkromne Služba PlatformNameService a HostsFileNameService triedy statických členov.

Vnorené rozhrania do rozhraní

Java vám tiež umožňuje deklarovať rozhrania vnútri rozhraní. V tomto prípade je vnorené rozhranie statickým členom jeho obklopujúceho rozhrania a ešte raz statický kľúčové slovo je nadbytočné. Vnorené rozhranie je tiež implicitne verejné. Tu je príklad:

 rozhranie EnclosingInterface {rozhranie EnclosedInterface1 // implicitne statické a verejné {} statické rozhranie EnclosedInterface2 // výslovne statické a implicitne verejné {}} 

K uzavretému rozhraniu sa dostanete tak, že pred jeho menom zadáte názov a operátor prístupu členov. Napríklad uveďte EnclosingInterface.EnclosedInterface1 pristúpiť Uzavreté rozhranie1.

Vnorené rozhrania v rámci Java Collections Framework

Rámec kolekcie Java poskytuje prehľad o užitočnosti vnorenia jedného rozhrania do druhého. Zvážte java.util.Map rozhranie, ktoré popisuje a mapa (zbierka párov kľúč - hodnota). The Mapa rozhranie abstraktní, čo to znamená byť mapou. Triedy ako napr HashMap a java.util.TreeMap realizovať Mapa, popisujúci rôzne druhy implementácií máp.

Mapa vyhlasuje Vstup ako jeden z jej členov. Vstup je vnorené rozhranie, ktoré popisuje pár kľúč - hodnota. The Vstup rozhranie je deklarované v Mapa kvôli úzkemu vzťahu medzi týmito dvoma rozhraniami - každý záznam musí patriť do mapy. Vstup je implementovaná java.util.AbstractMap triedy SimpleEntry a SimpleImmutableEntry statické členské triedy. Tieto statické triedy členov budete zvyčajne ignorovať a budete s nimi komunikovať Mapa. ​​Vstup namiesto toho.

Vnorenie tried do rozhraní

Jednou z funkcií cudzieho jazyka Java je schopnosť vnoriť triedu do rozhrania. Rovnako ako vnorené rozhranie, vnorená trieda je implicitne verejná a statická. Tu je príklad:

 rozhranie EnclosingInterface {trieda EnclosedClass {}} 

Napriek svojej podivnosti môže byť schopnosť vnoriť triedu do rozhrania užitočná, najmä ak existuje úzky vzťah medzi priloženým rozhraním a priloženou triedou. Zachytenie tohto vzťahu zlepšuje čitateľnosť zdrojového kódu. V prípadoch, keď má trieda a rozhranie rovnaký názov, vnorenie vám tiež môže pomôcť vyhnúť sa konfliktu názvov medzi týmito dvoma názvami.

Príklad: Adresovateľné rozhranie obsahuje triedu adries

Predpokladajme, že chcete modelovať adresovateľné entity, ako sú listy, pohľadnice a balíky. Každá entita bude popísaná svojou vlastnou triedou, ale všetky majú spoločné to, že sú adresovateľné k určitému cieľu. Každá trieda môže byť navrhnutá s duplicitnými poľami adresy, alebo môžete tieto podrobnosti abstraktne vytvoriť do spoločnej nadtriedy. Prípadne môžete využiť zoznam 1 Adresovateľné rozhranie.

Zoznam 1. Addressable.java

 verejné rozhranie Adresovateľné {public class Address {private String boxNumber; súkromná ulica String; súkromné ​​mesto String; verejná adresa (String boxNumber, String street, String city) {this.boxNumber = boxNumber; this.street = ulica; this.city = mesto; } public String getBoxNumber () {return boxNumber; } public String getStreet () {spiatočná ulica; } public String getCity () {návratové mesto; } public String toString () {return boxNumber + "-" + ulica + "-" + mesto; }} verejna adresa getAddress (); } 

The Adresovateľné rozhranie popisuje adresovateľnú entitu ako obsahujúcu adresu. Táto adresa je opísaná vnoreným Adresa trieda. The getAddress () metóda je implementovaná čímkoľvek, čo trieda implementuje Adresovateľné.

Výpis 2 predstavuje zdrojový kód a List triedy, ktorá implementuje Adresovateľné.

Výpis 2. Letter.java

 verejná trieda Letter implementuje Addressable {private Addressable.Address address; verejné písmeno (String boxNumber, String street, String city) {address = new Addressable.Address (boxNumber, street, city); } public Address getAddress () {spiatočná adresa; }} 

List ukladá singel adresa pole typu Adresovateľné. Adresa. Túto vnorenú triedu vytvára inštancia Listkonštruktér. Vykonané getAddress () metóda vráti tento objekt.

Teraz zvážte, čo sa stane, keď pridáme Pohľadnica a Pozemok triedy do Adresáre žiadosť. Výpis 3 predstavuje zdrojový kód súboru Adresáre žiadosť, ktorá demonštruje Pohľadnica, Pozemoka List typy.

Zoznam 3. Addressables.java

 verejná trieda Adresáre {public static void main (String [] args) {Addressable [] addressables = {new Letter ("100", "Main Street", "Town A"), new Postcard ("200", "Waterfront Drive" , „Mesto B“), nový balík („300“, „10. ul.“, „Mesto C“)}; for (int i = 0; i <addressables.length; i ++) System.out.println (addressables [i] .getAddress ()); }}

The hlavný() metóda najskôr vytvorí pole Adresovateľné predmety. Potom sa vznáša nad týmito objektmi getAddress () na každom objekte. Vrátený Adresovateľné. Adresa objektu natiahnuť() metóda je vyvolaná System.out.println () vráti reťazcovú reprezentáciu objektu a táto reprezentácia sa následne vydá.

Zostavte výpisy 2 a 3 spolu s Postcard.java a Parcel.java nasledovne:

 javac * .java 

Spustite aplikáciu nasledovne:

 java adresáre 

Mali by ste dodržiavať nasledujúci výstup:

 100 - Hlavná ulica - Mesto A 200 - Nábrežie - Mesto B 300 - 10. ulica - Mesto C 

Vnorené rozhrania so statickými metódami (rozhrania statických metód)

Mnoho vývojárov sa domnieva, že vnorenie triedy do rozhrania porušuje objektovo orientované programovanie a účel rozhrania. Je však dobré o tejto funkcii vedieť, pretože sa s ňou môžete stretnúť pri údržbe kódu niekoho iného. Ďalej, teraz, keď sa rozhrania vyvinuli tak, aby zahŕňali predvolené a statické metódy, môžete naraziť na ďalšie dôvody na vnorenie triedy do rozhrania. Ako príklad uvádzame lokálnu triedu vnorenú do rozhrania statickej metódy:

 rozhranie I {static void m () {trieda C {}}} 

Záver

Predstavil som tri bežné spôsoby použitia techník vnorenia s triedami a rozhraniami Java a tiež som demonštroval kontroverznú techniku ​​vnorenia rozhraní so statickými metódami. Zobraziť kompletné Java 101 tutoriál, kde sa dozviete viac o vnorení so statickými triedami a vnútornými triedami v Jave.

Tento príbeh „Hniezdenie s rozhraniami Java“ pôvodne publikoval server JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found