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.
sadržaj
Č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.
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
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
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
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.
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
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
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
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
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.
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:
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
- Kako instalirati Java na Windows 7
- Kako ažurirati Java na Linux i Windows operativnim sustavima?
- Prvi Java program je Hello World
- Što je jаvascript? Povijest izgleda i glavne značajke
- Java Island Riddle: Zanimljive i korisne informacije za turiste
- Obitelj motocikala "Java-350"
- "Java 350-638" - san sovjetskog motociklista
- Cigare `Java`: opis i vrste
- Java polja žica. Razvrstavanje polja u Java. Dvodimenzionalni Java raspored
- Java: regularni izrazi, posebni znakovi
- Programiranje: Java. Vrste podataka
- Java integrirano razvojno okruženje
- Java: InputStream. Ulazni tokovi
- BigInteger Java: radi s velikim brojem
- Java raspored. Rasporedi u Javi. Java za početnike
- Java: rad s datotekama - pisanje, čitanje i brisanje
- Iz memorije Minecraft: što učiniti i kako se riješiti ove pogreške
- Elementi Java modela objekta: sažetak klase, sučelje
- Kako omogućiti Java u Firefoxu za probleme s zaključavanjem
- Kako ukloniti java s računala? Lako je!
- Kako pisati u datoteku u Javi