Generici Flashcards
Uvod
Uopstavanje apstrakcija->parametrizovani tipovi i postupci
Slicnost sa C++ genericima samo namena
U Javi: -nezavisno prevodjenje
- samo jedan tip bez obzira na broj konkretizacija
- parametrizacija primitivnim tipom nije moguca
Priroda generika
Kod generika se prevodi nezavisno, samo jedna klasa bez obzira na broj poziva generika, konkretizovane klase su u stvari ista klasa
Provera i brisanje tipa
Prevodila ubacuje proveru tipa, formalni parametri generickog tipa u celom telu se zamenjuju sa object, vrsi se konverzija u ciljni tip ali je sada bezbedna, u bytecode samo jedan tip za sve pozive generika- raw
Definisanje genericke klase
Genericka klasa moze biti parametrizovana jednim ili pomocu vise tipova koji se pojavljuju kao formalni argumenti generika ciji je doseg sve do kraja klase.
Oni se mogu pojavit u deklaraciji polja, kao povratni tip metoda, kao parametar metoda ili konstruktora, u deklaraciji lok. promenljive, u deklaraciji ugnezdjenog tipa.
Ogranicenja u definicijama
Formalni parametar se ne moze koristiti kao tip statickog polja, povratna vrednost ili param staticke metode, tip lok. prom u stat metodi, u statickim inicijalizatorskim blokovima-razlog:samo jedna klasa(sirovi)
Takodje, statickom clanu klase se ne moze pristupati preko parametrizovanog imena
Koriscenje generika
Konkretizovani tip ili poziv generika=formalni parametri zamenjeni stvarnim argumentima
Stvarni argumenti mogu biti klase, interfejsi i nizovi(cak i sa elem prim tipa) ali ne i sami primitivni tipovi
Zakljucivanje o tipu
Od Jave 7 u pozivu konstruktora se mogu izostaviti argumenti tipa, prevodilac zakljucuje automatski na osnovu izraza sa leve strane =
Generici i nizovi
Argument generika moze biti niz
1. referenci na objekte
2.primitivnog tipa
Ne moze se kreirati niz objekata konkretne genericke klase(moze samo sa object ali nebezbedno)
Generici, izvodjenje u ugnezdjenje
Genericka klasa moze biti izvedena iz
1. negenericke
2. konkretizacije generickog tipa
3. sirovog tipa
Genericka klasa ne moze biti podklasa Throwable
Kod udnezdjenih tipova i spoljasnji i udnezdjeni mogu biti genericki ili ne
Ogranicenje parametara
Parametar generika se moze ograniciti sa gornje strane
Stvarni parametar T mora biti podtipa ili tipa svih navedenih tipova