RačunalaProgramiranje

Java Generički lijekovi: opis i metode

Počevši s pojavom Java jeziku je kroz mnoge promjene, koje bez sumnje donijeli pozitivne trenutke u svojoj funkcionalnosti. Jedan od tih značajnih promjena je uvođenje Java generičkim ili generalizacija. Ta funkcija ne samo da je jezik fleksibilniji i svestran, ali i mnogo sigurnije u smislu dovođenja vrste podataka.

Činjenica je da je prije uvođenja generičkih lijekova u Java generički kod mogao biti stvoren, ne samo u pogledu tipa referentni objekt. Takve veze mogu biti dodijeljena bilo koji objekt. Uostalom, nastava u Java su implicitne klase Object nasljednici. Međutim, ovaj pristup je potencijalni izvor mnogih pogrešaka u vezi s vrstama osiguranja u očitoj pretvorbe objekta od objekta do ciljne vrste. Kada koristite generalizacije sve baca se izvode implicitno i automatski, uklanjanje čak i mogućnost pogrešaka.

Java Generički lijekovi: opis i primjer

Razmotrimo jednostavan primjer primjene generalizacije na redovne nastave na slici ispod. A zatim nastavite s detaljnim pregledom svih suptilnosti i nijanse Java općenito.

Obratite pozornost na način na koji je klasa izjava javlja par. Odmah nakon imena klase, otvorene uglate zagrade, što je ukazalo na slovo T. To je vrsta punila, koja je u procesu stvaranja instancu te klase će biti zamijenjen određenog tipa. To izgleda ovako: Par obj = new pair (). Treba napomenuti da se umjesto T može odrediti bilo pismo, ali, u pravilu, koriste T, V ili E.

Napomena: počevši od osme verzije Jave, navodeći vrstu cilja kada proglašenje referentnog zagrade u konstruktoru može ostati prazno. Dakle, primjer se može napisati kao što je gore: Pair obj = new pair <> ().

Kada klasa je deklariran na takav način, onda u njegovom tijelu, umjesto da određene vrste polja, linkovi, objekata vraćenih metodama koje možete koristiti to pismo. Od T prilikom kreiranja klasa objekt zamjenjuje određenom tipu, prva i druga polja u tom slučaju će biti tipa Integer.

Slijedeći logiku argumenata i firstItem secondItem, iz odgovarajućeg konstruktora također mora biti tipa Integer ili podrazreda. Ako pokušate prenijeti vrstu podataka koji se razlikuje od onoga što je navedeno prilikom izrade objekta, prevodilac neće dopustiti pogrešku. Dakle, argumenti konstruktora kada objekt će biti kao što slijedi: Pair obj = new pair <> (novi broj (1), novi broj (2)). Isto se odnosi i na argumentima i metodama setFirst setSecond. I kao što ste vjerojatno pogodili, metode getFirst getSecond i vratit će vrijednost tipa cijeli broj.

Generalizirani s nekoliko parametara tipa klase

U općim klase može deklarirati više parametara tipa koji su postavljeni u zagrade zarezom. Redizajnirana i slučaj par klasa je u nastavku.

Kao što možete vidjeti, kada se stvoriti instancu te klase u zagrade treba navesti isti broj vrsta kao parametara. Ako ste upoznati s ovom vrstom strukture podataka kao mapa, možete vidjeti da se koristi točno isti princip. Tamo je prvi argument specificira tip ključa, a drugi - tip vrijednosti. Valja napomenuti da su vrste prenose Kada je objekt argumenti mogu preklapati. Na primjer, sljedeći oglas par klasa primjer je apsolutno točna: Par obj.

Neke značajke generalizacije

Prije odlaska dalje, treba napomenuti da je Java prevodilac ne stvara različite verzije klase paru. Naime, u procesu sastavljanja generalizirana pisati sve informacije se briše. Umjesto toga, donijeti odgovarajuće vrste, stvarajući posebnu verziju Pair klase. Međutim, u programu ima još samo generički verzija klase. Ovaj proces se naziva tipa Generički čišćenje Java.

Napomena važnu točku. Linkovi na različite verzije istog java generičke klase ne može ukazati na jedan te isti objekt. To je, valjda imamo dvije veze: Uparivanje obj1 i par obj2. Prema tome, u skladu obj1 = obj2 pogreška. Iako su obje varijable tipa par , predmeti na koje se odnose, su različiti. To je najbolji primjer o vrstama osiguranja u Java općenito.

Ograničenja generičkih klasa

Važno je znati da generalizacije se može primijeniti samo na referentni vrste, koja je proći parametre generičke klase java argument mora biti tipa klase. Ove jednostavne vrste, kao što su, na primjer, dvostruke ili duge, ne mogu se prenositi. Drugim riječima, sljedeći redak par klasa izjava nije dopušteno: Par obj. Međutim, ovo ograničenje nije ozbiljan problem, jer postoji odgovarajuća Java omot klasa za svaku primitivnog tipa. Strogo govoreći, ako je klasa Par želite zatvoriti u kućište cijeli broj i Boolean vrijednost avtoupakovka radi sve za vas: par obj = new pair <> (25, true).

Još jedan ozbiljan ograničenje je nemogućnost stvoriti instancu tipa parametra. Na primjer, sljedeći redak će uzrokovati pogrešku kompilacijski: T prvi = new T (). To je očito, jer ne znaš unaprijed da li argument prošao cijeli razred ili apstraktno, ili čak i sučelje. Isto vrijedi i za stvaranje polja.

ograničene vrste

Često postoje situacije kada je potrebno ograničiti popis vrsta koje mogu biti usvojeni kao argument za Java generičke klase. Pretpostavimo da u našem razredu Pair želimo ukratko opisali samo brojčane vrijednosti za daljnje matematičkih operacija na njima. Za to nam je potrebno odrediti gornju granicu vrsti parametra. To se ostvaruje pomoću a superclass oglasa naslijedio sve argumente donesenih u zagrade. To će izgledati kako slijedi: Klasa par . Na taj način, da prevodilac nalazi umjesto parametar T može biti supstituiran ili broj klasa ili jedna od njenih podklasa.

Ovo je zajednički prijem. Takva ograničenja se često koriste za pružanje parametre tipa kompatibilnost u jednoj te istoj klasi. Razmotrimo primjer u našem razredu Pair: Klasa par . Ovdje ćemo reći prevodilac da tip T može biti proizvoljan, a tip V mora biti T tip ili jedan od njegovih podrazreda.

Ograničavanje „odozdo” je upravo na isti način, ali umjesto riječi proteže se čarolija super riječ. To je klasificiran klasa par kaže da umjesto T može zamijeniti ili ArrayList, ili bilo koje klase ili sučelje koje se nasljeđuje.

Generičke metode Java i graditelji

U Java, generalizacije se može primijeniti ne samo na nastavu, ali i metode. Na primjer, generički metoda može biti proglašen u redovnoj nastavi.

Kao što se vidi na gornjoj slici, oglas generalizirana metoda nije velika stvar. Dosta prije nego vrsta metoda povratak staviti zagrada i odrediti parametre tipa u njima.

Ako je sve učinjeno na sličan način kao konstruktora:

Zagrade u ovom slučaju staviti ispred imena projektanta, jer on nema povratnu vrijednost. Rezultat oba programa će biti:

Integer

niz

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 hr.delachieve.com. Theme powered by WordPress.