Java Generics: Opis i metode

Od svog osnutka, Java jezik je doživio puno promjena, što je nedvojbeno donijelo pozitivne značajke njegovoj funkcionalnosti. Jedna takva značajna promjena je uvođenje Java Generic ili generalizacija. Ova je funkcija učinila jezik ne samo fleksibilnijim i svestranijim nego i sigurnijim u smislu smanjenja vrsta podataka.

opis generatora Java

Činjenica je da bi se prije uvođenja generičkih lijekova generički kod u Javi mogao stvoriti samo upućivanjem na vrstu objekta. Takve veze mogu se dodijeliti bilo kojem objektu. Uostalom, sve klase u Javi su implicitni potomci klase Object. Međutim, ovaj je pristup potencijalni izvor mnogih vrsta sigurnosnih pogrešaka kada eksplicitno pretvorite objekt iz Objecta na ciljnu vrstu. Kada se upotrebljavaju generalizacije, svi se odlacci izvode implicitno i automatski, što isključuje i mogućnost da se pogreške pojavljuju.

Java Generics: opis i primjer

Uzmimo jednostavan primjer primjene generalizacije na uobičajenu klasu na donjoj slici. I tek tada ćemo nastaviti do detaljnog ispitivanja svih suptilnosti i nijansi Java Generic.

generic java klase

Primjetite kako je klasa Pair proglašena. Neposredno nakon naziva klase, otvori se kutna zagrada, u kojoj je naznačeno slovo T. To je vrsta rezerviranog mjesta koja će se zamijeniti određenim tipom prilikom izrade primjerka ove klase. Izgleda ovako: Pair obj = novi par< Integer> (). Treba napomenuti da umjesto T možete odrediti bilo koje slovo, ali, u pravilu, koristite T, V ili E.

Napomena: počevši od osme verzije Java, navodeći vrstu ciljanja kada je veza proglašena, možete ostaviti kutne zagrade u konstruktoru praznima. Dakle gore navedeni primjer može se prepisati na sljedeći način: Par obj = novi par<> ().

Kada se klasa proglasi na ovaj način, onda u ovom tijelu, umjesto određenih vrsta polja, reference i metoda vraćene metodama, možete koristiti ovo pismo. Budući da je T zamijenjen određenom vrstom prilikom izrade klase predmeta, prvo i drugo polje u ovom slučaju bit će tipa Integer.

Slijedeći logiku, argumenti firstItem and secondItem, proslijeđeni odgovarajućem konstruktoru, također moraju biti tipa Integer ili njegov podrazred. Ako pokušate unijeti vrstu podataka koja se razlikuje od onoga što je navedeno prilikom izrade objekta, prevodilac neće preskočiti tu pogrešku. Stoga će konstruktor s argumentima prilikom izrade objekta imati sljedeći oblik: Pair obj = novi par<> (novi Integer (1), novi Integer (2)). Isto vrijedi i za argumente metodama setFirst i setSecond. I kao što ste vjerojatno već nagađali, metode getFirst i getSecond vratit će vrijednosti tipa Integer.

Generička klasa s nekoliko parametara tipa

U generičkim klasama možete također deklarirati nekoliko parametara tipa koji su navedeni u kutnim zagradama odvojeni zarezima. Klasa Pair za ovaj slučaj prikazana je na donjoj slici.

java generički

Kao što možete vidjeti, prilikom izrade primjerke takve klase u kutnim zagradama, treba odrediti isti broj tipova kao i parametri. Ako ste upoznati s takvom strukturom podataka kao što je karta, onda biste mogli primijetiti da se tamo upotrebljava isti princip. Tamo prvi argument određuje tip ključa, a drugi - vrsta vrijednosti. Valja napomenuti da vrste argumenata koji se prenose stvaranju objekta mogu biti isti. Dakle, sljedeća izjava instance klase Pair je apsolutno točna: Pair obj.

Neke značajke generalizacija

Prije nastavka, treba napomenuti da Java prevodilac ne stvara nikakve različite verzije klase Pair. Zapravo, tijekom procesa kompiliranja sve se informacije o generičkom tipu brišu. Umjesto toga, odgovarajuće se vrste bacaju, stvarajući posebnu verziju klase Pair. Međutim, sam program i dalje ima jednu opću verziju ove klase. Ovaj se proces zove u Java generičkom čišćenju tipa.



Napominjemo važnu točku. Preporuke za različite verzije iste generacije generacije Java ne mogu ukazivati ​​na isti objekt. To jest, recimo da imamo dvije veze: Pair obj1 i par obj2. Stoga se pojavljuje pogreška u retku obj1 = obj2. Iako su obje varijable tipa Pair, objekti na koje se odnose su različiti. Ovo je živopisan primjer sigurnosti tipova u Java Generic.

Ograničenja koja se nameću za opće klase

Važno je znati da generalizacija može biti primijenjena samo na referentne vrste, tj. Argument koji se prosljeđuje parametru java generičke klase mora nužno biti vrsta klase. Takve jednostavne vrste kao, na primjer, dvostruke ili dulje, ne mogu se prenijeti. Drugim riječima, sljedeća linija izjave Pair klase nije valjana: Pair obj. Međutim, ovo ograničenje nije ozbiljan problem, jer Java ima odgovarajuću klupu omotača za svaki primitivni tip. Strogo govoreći, ako u skupini Pair želite unijeti cjelobrojnu i logičnu vrijednost, auto-pack će učiniti sve za vas: Pair obj = new Pair<> (25, točno).

Druga ozbiljna ograničenja su nemogućnost stvaranja primjera parametra tipa. Dakle, sljedeća linija uzrokuje pogrešku u kompilaciji: T first = new T (). To je očito, jer ne znate unaprijed hoće li se cijeli razred ili apstraktno sučelje prosljeđivati ​​kao argument. Isto vrijedi i za izradu polja.

Ograničene vrste

Vrlo često postoje situacije kada je potrebno ograničiti popis tipova koji se mogu prenijeti kao argument za java generičku klasu. Pretpostavimo da u našoj klasi Pair želimo zatvoriti isključivo numeričke vrijednosti za daljnje matematičke operacije na njima. Da biste to učinili, moramo postaviti gornju granicu parametra vrste. Ovo se provodi pomoću deklaracije superklase koju su naslijedili svi argumenti koji su prošli u kutnim zagradama. To će izgledati ovako: klasa Pair. Na taj način, prevodilac uči da umjesto parametra T možete zamijeniti bilo brojčanu klasu ili jednu od njegovih podklasa.

Ovo je uobičajena tehnika. Takva ograničenja često se koriste za osiguranje kompatibilnosti parametara tipa u istoj klasi. Razmotrite primjer u našoj klasi Pair: klasa Pair. Ovdje kažemo prevoditelju da tip T može biti proizvoljan, a tip V mora biti tip T ili jedan od njegovih podklasa.

Ograničenje "odozdo" događa se na isti način, ali umjesto da se riječ širi, napisana je riječ super. To je klasa Pair kaže da umjesto T, bilo ArrayList ili bilo koje klase ili sučelje koje nasljeđuje može biti zamijenjeno.

Generičke Java metode i konstruktori

U Java generalizations može se primijeniti ne samo u odnosu na klase, ali i metode. Dakle, generalizirana metoda može se proglasiti u redovitom razredu.

generičke metode java

Kao što vidite na gornjoj slici, ne postoji ništa komplicirano u izjavi opće metode. Dovoljno je staviti kutne zagrade prije metode povratnog tipa i odrediti parametre tipa u njima.

U slučaju konstruktora, sve se vrši na isti način:

čišćenje generičkog tipa java

U ovom se slučaju zagrade zaglavlja postavljaju pred ime konstruktora jer ne vraća nikakvu vrijednost. Rezultat rada obaju programa bit će:

Integer

niz

Dijelite na društvenim mrežama:

Povezan
Kako ažurirati Java na Linux i Windows operativnim sustavima?Kako ažurirati Java na Linux i Windows operativnim sustavima?
Prvi Java program je Hello WorldPrvi Java program je Hello World
Što je jаvascript? Povijest izgleda i glavne značajkeŠto je jаvascript? Povijest izgleda i glavne značajke
Java Island Riddle: Zanimljive i korisne informacije za turisteJava Island Riddle: Zanimljive i korisne informacije za turiste
Obitelj motocikala "Java-350"Obitelj motocikala "Java-350"
"Java 350-638" - san sovjetskog motociklista"Java 350-638" - san sovjetskog motociklista
Cigare `Java`: opis i vrsteCigare `Java`: opis i vrste
Java polja žica. Razvrstavanje polja u Java. Dvodimenzionalni Java rasporedJava polja žica. Razvrstavanje polja u Java. Dvodimenzionalni Java raspored
Java: regularni izrazi, posebni znakoviJava: regularni izrazi, posebni znakovi
Programiranje: Java. Vrste podatakaProgramiranje: Java. Vrste podataka
» » Java Generics: Opis i metode
LiveInternet