Java Generics Tutorial-co jsou generika a jak je používat?

Java Generics je jednou z nejdůležitějších vlastností jazyka Java. Myšlenka generik je poměrně jednoduchá, někdy však vychází jako složitá kvůli posunu od obvyklé syntaxe s ní spojené.

účelem tohoto tutoriálu je seznámit vás s tímto užitečným konceptem generik snadno srozumitelným způsobem.

ale předtím, než se ponoříme do generik, zjistíme, proč byly v první řadě zapotřebí Java generiky.,

Účel Java Generik

Před zavedením generik v Javě 5, můžete psát a kompilovat kód fragment kódu, jako je tento, aniž házet chybu nebo varování:

můžete přidat hodnoty libovolného typu seznam nebo jiná Java Kolekci, aniž by museli deklarovat, jaký typ dat ukládá. Ale když načtete hodnoty ze seznamu, musíte je explicitně odevzdat do určitého typu.

zvažte iteraci prostřednictvím výše uvedeného seznamu.,

Umožňuje vytvoření seznamu bez první prohlášení uložená data typu, jako jsme to udělali, by mohla mít za následek programátoři dělat chyby, jako výše uvedené, které hází ClassCastExceptions během runtime.

generika byla zavedena, aby se zabránilo programátorům v takových chybách.

u generik můžete explicitně deklarovat datový typ, který bude uložen při vytváření kolekce Java, jak ukazuje následující příklad.,

Poznámka: objekt sběru Java můžete stále vytvářet bez zadání uloženého datového typu, ale nedoporučuje se.

Nyní, nemůžete omylem obchod Integer na typ String seznam bez házení compile-time error. Tím je zajištěno, že váš program nenarazí na runtime chyby.

hlavním účelem zavedení generik do Javy bylo vyhnout se běhu do ClassCastExceptions během běhu.

vytváření generik Java

generiky můžete použít k vytvoření tříd a metod Java., Podívejme se na příklady toho, jak vytvořit generika každého typu.

Generické Třídy

Při vytváření generické třídy, typ, parametr třídy je přidán na konec názvu třídy v úhlu <> závorky.

zde,T je parametr datového typu. T N E jsou některé z písmen používaných pro typ dat parametrů, podle Java konvence.,

ve výše uvedeném příkladu můžete při vytváření objektu GenericClass předat konkrétní datový typ.

při vytváření objektu obecné třídy nelze předávat primitivní datový typ parametru datového typu. Jako parametry typu lze předávat pouze datové typy, které rozšiřují typ objektu.

například:

generické metody

vytváření generických metod následuje podobný vzor jako vytváření generických tříd. Můžete implementovat generickou metodu uvnitř obecné třídy, stejně jako generickou.,

zde můžete předat pole určitého typu pro parametrizaci metody. Generická metoda PrintItems() iteruje přes předané pole a vytiskne položky uložené stejně jako normální metoda Java.

parametry ohraničeného typu

generické třídy a metody, které jsme vytvořili výše, lze parametrizovat na jakýkoli jiný datový typ než primitivní typy. Ale co kdybychom chtěli omezit datové typy, které lze předat generikům? Zde přicházejí ohraničené parametry typu.,

můžete vázat datové typy přijaté obecnou třídou nebo metodou zadáním, že by to měla být podtřída jiného datového typu.

například:

, UpperBoundedClass UpperBoundedMethod může být pouze parametrizovat pomocí podtypy List datový typ.

List datový typ chová jako horní mez parametr typu. Pokud se pokusíte použít datový typ, který není podtypem List, bude to hodit chybu kompilace.

hranice nejsou omezeny pouze na třídy., Můžete také předat rozhraní. Rozšíření rozhraní znamená v tomto případě implementaci rozhraní.

parametr může mít také více mezí, jako je tento příklad ukazuje.

přijímající datový typ musí být podtřídou tříd zvířat i savců. Pokud je jedním z těchto hranic třída, musí být v vázané deklaraci na prvním místě.

ve výše uvedeném příkladu, pokud je savec třída A zvíře je rozhraní, musí být savec na prvním místě, jak je uvedeno výše. V opačném případě kód vyvolá chybu kompilace.,

Java Generics zástupné znaky

zástupné znaky se používají k předávání parametrů generických typů metodám. Na rozdíl od obecné metody je zde obecný parametr předán parametrům přijatým metodou, která se liší od parametru datového typu, který jsme diskutovali výše. Zástupný znak je reprezentován ? symbol.

výše uvedenéprintItems() metoda přijímá seznamy jakéhokoli datového typu jako parametr. To zabraňuje programátorům, aby museli opakovat kódy pro seznamy různých datových typů, což by bylo bez generik.,

Horní ohraničené zástupné znaky

Pokud chceme omezit datové typy uložené v seznamu přijatém metodou, můžeme použít ohraničené zástupné znaky.

příklad:

printSubTypes() metoda přijímá pouze seznamy, které ukládají podtypy barvy. Přijímá seznam objektů RedColor nebo BlueColor, ale nepřijímá seznam zvířecích objektů. Je to proto, že zvíře není podtyp barvy. Toto je příklad horní ohraničené zástupné karty.,

Nižší Ohraničené Znaky

Podobně, pokud máme:

printSuperTypes() metoda přijímá pouze uvádí, že obchod super typy Pes třídy. To by akceptovat seznam savců nebo zvířecích předmětů, ale ne seznam LabDog objektů, protože LabDog není superclass psa, ale podtřídy. Toto je příklad divokého karty s nižším ohraničením.

závěr

Java Generics se stal rysem, bez kterého programátoři nemohou žít od svého zavedení.

tato popularita je způsobena jeho dopadem na usnadnění života programátorů., Kromě toho, že jim brání dělat chyby kódování, použití generik činí kód méně opakujícím se. Všimli jste si, jak zobecňuje třídy a metody, abyste se vyhnuli opakování kódu pro různé typy dat?

mít dobrou znalost generik je důležité, aby se stal odborníkem v jazyce. Takže použití toho, co jste se naučili v tomto tutoriálu v praktickém kódu, je způsob, jak jít vpřed.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *