PočítačeProgramování

Java Generics: popis a metody

Počínaje vzhledu jazyka Java prošla mnoha změnami, které nepochybně přinesl pozitivní okamžiky v jeho funkčnost. Jeden z těchto významných změn je zavedení Java generické či zobecnění. Tato funkce nejen dělat jazyk více flexibilní a univerzální, ale také mnohem bezpečnější, pokud jde o uvedení datové typy.

Faktem je, že před zavedením generik v Javě generického kódu by mohly být vytvořeny, a to nejen pokud jde o referenční typ objektu. Tyto odkazy lze přiřadit libovolný objekt. Koneckonců, tříd v Javě jsou implicitní třídy Object dědici. Nicméně, tento přístup je potenciálním zdrojem mnoha chyb souvisejících s typy cenných papírů v zdánlivé přeměny objektu z objektu do cílového typu. Při použití zobecnění všechny hody se provádějí implicitně a automaticky, což eliminuje i potenciál pro chyby.

Java Generics: popis a příklad

Uvažme jednoduchý příklad uplatnění generalizace do běžných tříd na obrázku níže. A pak pokračovat do podrobného zkoumání všech nuance a nuance Java Generic.

Věnovat pozornost tomu, jakým způsobem prohlášení třída dochází Pair. Bezprostředně po názvem třídy, otevřené lomené závorky, které je uvedeno písmeno T. Jedná se o druh plniva, který je v procesu vytváření instance této třídy bude nahrazen určitého typu. Vypadá to takto: Dvojice obj = new Pair (). Je třeba poznamenat, že namísto T lze zadat jakýkoliv dopis, ale zpravidla pomocí T, V nebo E.

Poznámka: počínaje osmou verzi Javy, stanovení cílové typ při deklarování reference úhelníky v konstruktoru může zůstat prázdná. Tak například může být přepsána jak je uvedeno výše: Dvojice obj = new Pair <> ().

Je-li třída deklarován takovým způsobem, pak v jeho těle namísto specifických typů polí, odkazy objektů vrácených podle metod, které můžete použít ten dopis. Vzhledem k tomu, T při vytváření objekt třídy je nahrazen určitého typu, první a druhé pole v tomto případě být typu celé číslo.

Podle logiky argumentů a firstItem secondItem, postoupeny příslušnému konstruktoru musí být typu Integer nebo podtřídy. Pokusíte-li se vysílat datový typ, který je odlišný od toho, co bylo určeno při vytváření objektu, kompilátor nenechá tuto chybu. To znamená, že argumenty konstruktor když objekt bude následující: Pár obj = nový pár <> (nové celé číslo (1), nový Celé číslo (2)). Totéž platí pro argumenty a metody setFirst setSecond. A jak jste pravděpodobně uhodli, metody getFirst getSecond a vrátí hodnotu typu Integer.

Zobecněný s několika parametry typů tříd

Zevšeobecňujícími tříd mohou také deklarovat více parametry typu, které jsou stanoveny v hranatých závorkách s čárkou. Přebudovaný případě class Pair je uveden níže.

Jak vidíte, při vytvoření instance této třídy v hranatých závorkách by mělo být uvedeno stejný počet typů jako parametry. Pokud jste obeznámeni s tímto typem datové struktury jako mapa, můžete vidět, že používá naprosto stejný princip. Tam je první argument určuje typ klíče, a druhá - typ hodnoty. Je třeba poznamenat, že typy přenášena když objekt argumenty se mohou překrývat. Například následující reklama Pair třída instance je naprosto správné: Dvojice obj.

Některé funkce zobecnění

Než jít dál, je třeba poznamenat, že Java kompilátor nevytváří různé verze třídy Pair. Ve skutečnosti, v procesu sestavování zobecněné Typ Všechny informace se zrušuje. Místo toho, aby příslušné typy a vytváří speciální verzi třídy Pair. Nicméně, v programu je stále jen generická verze třídy. Tento proces se nazývá Java typu Generic čištění.

Poznámka důležitý bod. Odkazy na různé verze stejné java generické třídy nemůže upozornit na jeden a tentýž objekt. To znamená, že bychom mít dva odkazy: Pár obj1 a pár obj2. V důsledku toho, v souladu obj1 = obj2 chyba. Ačkoli obě proměnné jsou typu Dvojice , objekty, na které se vztahují, jsou různé. To je ukázkovým příkladem typů zabezpečení v Java Generic.

Omezení týkající se generických tříd

Je důležité vědět, že zobecnění lze aplikovat pouze na referenční typy, které je předat parametry generických tříd java argument musí být typu třídy. Tyto jednoduché typy, jako jsou, např., Dvojité nebo dlouhé, nemohou být převedeny. Jinými slovy, tento řádek deklarace třídy Pair není dovoleno: Pár obj. Nicméně, toto omezení není vážný problém, protože existuje odpovídající Java třídy obálky pro každý primitivní typu. Přísně vzato, v případě, že třída Pair chcete zapouzdření celé číslo a logická hodnota avtoupakovka dělá vše za vás Dvojice obj = new Pair <> (25, true).

Dalším závažným omezením je nemožnost vytvoření instance typ parametru. Například následující řádek způsobí chybu kompilace: T první = new T (). To je zřejmé, protože nevíte předem, zda argument prošel kompletní třídu nebo abstraktní, nebo dokonce rozhraní. To samé platí i pro vytvoření pole.

omezené typy

Docela často existují situace, kdy je nutné omezit seznam druhů, které mohou být předány jako argument pro Java generickou třídu. Dejme tomu, že jsme v naší třídě Pár chtít zapouzdřit pouze číselné hodnoty pro další matematické operace na nich. K tomu je třeba definovat horní hranici typ parametru. To je realizováno pomocí nadřazené reklamy zdědily všechny argumenty předané do lomených závorek. Bude vypadat takto: class Pair . Tímto způsobem se zjistí, že překladač namísto parametru T může být substituovaná nebo třída Číslo nebo jedné z jejích podtříd.

Jedná se o běžný příjem. Tato omezení jsou často používány pro poskytování parametrů typu kompatibilita v jedné a téže třídy. Vezměme si za příklad v naší třídě Pair: class Pair . Zde se říci kompilátoru, že typ T může být libovolný, a typ V musí být buď typu T nebo některé z jejích podtříd.

Omezením „zdola“ je přesně stejným způsobem, ale místo slova rozšiřuje, aby bylo patrné slovo Super. Která je klasifikována třídou Pair říká, že namísto T může být nahrazena nebo ArrayList nebo jakoukoliv třídu nebo rozhraní, které dědí.

Generické metody Java a konstruktérů

V Javě, zobecnění lze aplikovat nejen na úrovni tříd, ale i metody. Například obecný způsob může být zaneseny do běžné třídy.

Jak je vidět na obrázku výše, tento způsob reklamy generalizované není žádný velký problém. Dost před návratový typ metody dát úhelníků a zadat parametry typu v nich.

Pokud je vše provedeno podobně jako konstruktoru:

Úhelníky v tomto případě předložen jménu tvůrce, protože nemá žádnou návratovou hodnotu. Výsledkem obou programů bude:

celé číslo

provázek

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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