Programiranje

Gnezdenje z vmesniki Java

Če ste prebrali mojo Java 101 Vadnica, ki uvaja statične razrede in notranje razrede, bi morali poznati osnove dela z ugnezdenimi razredi v kodi Java. V tem nasvetu za Javo boste spoznali tri pogoste načine uporabe tehnik gnezdenja z vmesniki Java. Na kratko bom tudi prikazal gnezdeče vmesnike s statičnimi metodami, znanimi tudi kot vmesniki statičnih metod.

Več o vmesnikih Java

Za uvod v vmesnike Java, vključno z razliko med razredi in vmesniki, glejte moj Java 101 vadnica Delo z vmesniki v Javi.

Gnezdenje vmesnikov v razredih

Java vam omogoča izjavo o vmesnikih znotraj razredov. Ko je vmesnik samodejno razglašen, je samodejno statični član razreda. Vmesnika z datoteko. Ni treba razglasiti statično ključna beseda. Upoštevajte naslednji primer:

 razred EnclosingClass {vmesnik EnclosedInterface1 {} statični vmesnik EnclosedInterface2 {}} 

EnclosedInterface1 in EnclosedInterface2 so statični članski vmesniki. Lokalnim razredom ni enakovrednega, ker vmesnikov ni mogoče prijaviti v blokih. Vendar pa lahko vmesnike uporabljamo v kontekstih anonimnih razredov.

Do ugnezdenih vmesnikov običajno ne dostopajo izven zaprtih razredov. V nasprotnem primeru jih lahko prijavite kot vmesniki najvišje ravni. Namesto tega so do njih dostopni znotraj njihovih zaprtih razredov, kot je prikazano tukaj:

 razred EnclosingClass {vmesnik EnclosedInterface1 {} statični vmesnik EnclosedInterface2 {} statični razred EnclosedClass1 izvaja EnclosedInterface1, EnclosedInterface2 {} razred EnclosedClass2 izvaja EnclosedInterface1, EnclosedInterface2 {} void m () {class EnclosedCface Interface EnclosedCface Interface EnclosedCface }} 

Upoštevajte ta razred statičnih članov EnclosedClass1, nestatični razred EnclosedClass2in lokalni razred EnclosedClass3 implementirati oba ugnezdena vmesnika. Vendar pa je v kontekstu anonimnega razreda mogoče implementirati samo en vmesnik. (Za več informacij o anonimnih predavanjih glejte Statični razredi in notranji razredi v Javi.)

Razredi z ugnezdenimi vmesniki v java.net

Standardna knjižnica razredov Java vključuje razrede z ugnezdenimi vmesniki. Na primer, InetAddress (v java.net paket), ki predstavlja naslov internetnega protokola, razglasi za zasebno Naslovi vmesnik, ki ga izvaja zasebno Predpomnjeni naslovi in NameServiceAddresses statični razredi članov. Razglaša tudi zasebnika NameService vmesnik, ki ga izvaja zasebno PlatformNameService in HostsFileNameService statični razredi članov.

Gnezdenje vmesnikov v vmesnikih

Java vam omogoča tudi izjavo o vmesnikih znotraj vmesnikov. V tem primeru je ugnezdeni vmesnik statični član njegovega zaprtega vmesnika in še enkrat statično ključna beseda je odveč. Prav tako je ugnezdeni vmesnik implicitno javen. Tu je primer:

 vmesnik EnclosingInterface {vmesnik EnclosedInterface1 // implicitno statični in javni {} statični vmesnik EnclosedInterface2 // eksplicitno statičen in implicitno javen {}} 

Do zaprtega vmesnika dostopate tako, da njegovo ime predpišete z imenom in operaterjem dostopa do člana. Na primer, navedite EnclosingInterface.EnclosedInterface1 dostopati EnclosedInterface1.

Vgnezdeni vmesniki v ogrodju zbirk Java

Okvir Java Collections omogoča vpogled v koristnost gnezdenja enega vmesnika v drugega. Razmislite o java.util.Map vmesnik, ki opisuje a zemljevid (zbirka parov ključ / vrednost). The Zemljevid vmesnik povzame, kaj pomeni biti zemljevid. Razredi, kot so HashMap in java.util.TreeMap izvajati Zemljevid, ki opisuje različne vrste izvedb zemljevidov.

Zemljevid izjavlja Vstop kot eden od njegovih članov. Vstop je ugnezdeni vmesnik, ki opisuje par ključ-vrednost. The Vstop vmesnik je prijavljen v Zemljevid zaradi tesne povezanosti obeh vmesnikov - vsak vnos mora pripadati zemljevidu. Vstop izvaja program java.util.AbstractMap razredov SimpleEntry in SimpleImmutableEntry statični razredi članov. Te statične razrede članov običajno prezrete in z njimi komunicirate Zemljevid.Vstop namesto tega.

Razredi gnezdenja v vmesnikih

Ena od lastnosti tujega jezika Java je sposobnost gnezdenja razreda znotraj vmesnika. Tako kot pri ugnezdenem vmesniku je ugnezdeni razred implicitno javen in statičen. Tu je primer:

 vmesnik EnclosingInterface {class EnclosedClass {}} 

Kljub svoji nenavadnosti je lahko gnezdenje razreda znotraj vmesnika koristno, še posebej, če obstaja tesna povezava med zaprtim vmesnikom in zaprtim razredom. Zajemanje tega razmerja izboljša berljivost izvorne kode. V primerih, ko imata razred in vmesnik isto ime, vam lahko z gnezdenjem preprečite navzkrižje imen med njima.

Primer: Naslovljivi vmesnik zajema razred naslovov

Recimo, da želite modelirati naslovljive entitete, kot so pisma, razglednice in paketi. Vsako entiteto bo opisal lasten razred, vendar imajo vsi skupne značilnosti, da jih je mogoče nasloviti na nek cilj. Vsak razred je lahko oblikovan z dvojnimi naslovnimi polji ali pa lahko te podrobnosti povzamete v skupni superrazred. Lahko pa izkoristite seznam 1 Naslovljivo vmesnik.

Seznam 1. Addressable.java

 javni vmesnik Addressable {naslov javnega razreda {private String boxNumber; zasebna String ulica; zasebno mesto String; javni naslov (String boxNumber, String street, String city) {this.boxNumber = boxNumber; this.street = street; this.city = mesto; } javni String getBoxNumber () {return boxNumber; } javni String getStreet () {return street; } javni String getCity () {return city; } javni String toString () {return boxNumber + "-" + street + "-" + city; }} javni naslov getAddress (); } 

The Naslovljivo vmesnik opisuje naslovljivo entiteto, ki vsebuje naslov. Ta naslov opisuje ugnezdeni Naslov razred. The getAddress () metoda se izvaja s katerim koli razredom Naslovljivo.

Seznam 2 predstavlja izvorno kodo a Pismo razred, ki izvaja Naslovljivo.

Seznam 2. Letter.java

 javni razred Letter izvaja Addressable {private Addressable.Address address; javno pismo (String boxNumber, String street, String city) {address = new Addressable.Address (boxNumber, street, city); } javni naslov getAddress () {povratni naslov; }} 

Pismo shrani en sam naslov polje tipa Naslovljiv. Naslov. Ta ugnezdeni razred je ustvaril Pismoje konstruktor. Izvedeno getAddress () metoda vrne ta predmet.

Zdaj pa razmislite, kaj se zgodi, ko dodamo Razglednica in Paket razredi na Naslovljivi aplikacijo. Seznam 3 predstavlja izvorno kodo Naslovljivi aplikacija, ki prikazuje Razglednica, Paket, in Pismo vrste.

Seznam 3. Addressables.java

 javni razred Addressables {public static void main (String [] args) {Addressable [] addressables = {new Letter ("100", "Main Street", "Town A"), nova razglednica ("200", "Waterfront Drive" , "Mesto B"), nov paket ("300", "10th Ave", "Mesto C")}; for (int i = 0; i <addressables.length; i ++) System.out.println (addressables [i] .getAddress ()); }}

The glavni () metoda najprej ustvari polje Naslovljivo predmetov. Nato se ponovi nad temi predmeti in prikliče getAddress () na vsakem predmetu. Vrnjeni Naslovljiv. Naslov predmeta toString () metoda prikliče System.out.println () za vrnitev nizovne predstavitve predmeta in ta predstavitev se nato izpiše.

Sestavite seznam 2 in 3 skupaj z Razglednica.java in Parcela.java kot sledi:

 javac * .java 

Zaženite aplikacijo na naslednji način:

 java Addressables 

Upoštevati morate naslednje rezultate:

 100 - Glavna ulica - Mesto A 200 - Obvodni pogon - Mesto B 300 - 10th Ave - Mesto C 

Vgnezdeni vmesniki s statičnimi metodami (vmesniki statičnih metod)

Mnogi razvijalci menijo, da gnezdenje razreda v vmesniku krši objektno usmerjeno programiranje in namen vmesnika. Vendar je dobro vedeti o tej zmožnosti, ker jo lahko naletite pri vzdrževanju kode nekoga drugega. Poleg tega lahko zdaj, ko so se vmesniki razvili tako, da vključujejo privzete in statične metode, naletite na dodatne razloge za gnezdenje razreda v vmesnik. Kot primer je tu lokalni razred, ugnezden v vmesnik statične metode:

 vmesnik I {static void m () {class C {}}} 

Zaključek

Predstavil sem tri pogoste načine uporabe tehnik gnezdenja z razredi in vmesniki Java ter pokazal tudi kontroverzno tehniko gnezdenja vmesnikov s statičnimi metodami. Glej celotno Java 101 vadnico, če želite izvedeti več o gnezdenju s statičnimi razredi in notranjimi razredi v Javi.

To zgodbo "Gnezdenje z vmesniki Java" je prvotno objavil JavaWorld.