V tomto výukovém programu se dozvíme o generických prostředích Java, jak pomocí obecných příkladů vytvořit třídu a metody generických metod a jejich výhodách.
Java Generics nám umožňuje vytvořit jednu třídu, rozhraní a metodu, kterou lze použít s různými typy dat (objektů).
To nám pomáhá znovu použít náš kód.
Poznámka : Generics nepracuje s primitivními typy ( int
, float
, char
atd.)
Třída Java Generics
Můžeme vytvořit třídu, kterou lze použít s jakýmkoli typem dat. Taková třída je známá jako Generická třída.
Takto můžeme vytvořit generickou třídu v Javě:
Příklad: Vytvořte generickou třídu
class Main ( public static void main(String() args) ( // initialize generic class // with Integer data GenericsClass intObj = new GenericsClass(5); System.out.println("Generic Class returns: " + intObj.getData()); // initialize generic class // with String data GenericsClass stringObj = new GenericsClass("Java Programming"); System.out.println("Generic Class returns: " + stringObj.getData()); ) ) // create a generics class class GenericsClass ( // variable of T type private T data; public GenericsClass(T data) ( this.data = data; ) // method that return T type variable public T getData() ( return this.data; ) )
Výstup
Vrácení generické třídy: 5 Vrácení generické třídy: Programování Java
Ve výše uvedeném příkladu jsme vytvořili obecnou třídu s názvem GenericsClass. Tuto třídu lze použít pro práci s jakýmkoli typem dat.
class GenericsClass (… )
Zde T použité uvnitř úhlové závorky označuje parametr typu . Uvnitř
Main
třídy jsme vytvořili dva objekty GenericsClass
- intObj - Zde je typový parametr T nahrazen
Integer
. GenericsClass nyní pracuje s celočíselnými daty. - stringObj - Zde je parametr typu T nahrazen
String
. Nyní GenericsClass pracuje s daty řetězce.
Metoda Java Generics
Podobně jako u třídy generik můžeme také vytvořit metodu, kterou lze použít s jakýmkoli typem dat. Taková třída je známá jako Generická metoda.
Takto můžeme vytvořit generickou třídu v Javě:
Příklad: Vytvořte obecnou metodu
class Main ( public static void main(String() args) ( // initialize the class with Integer data DemoClass demo = new DemoClass(); // generics method working with String demo.genericsMethod("Java Programming"); // generics method working with integer demo.genericsMethod(25); ) ) class DemoClass ( // creae a generics method public void genericsMethod(T data) ( System.out.println("Generics Method:"); System.out.println("Data Passed: " + data); ) )
Výstup
Obecná metoda: Data předána: Programování v jazyce Java Obecná metoda: Data předána: 25
Ve výše uvedeném příkladu jsme vytvořili obecnou metodu s názvem genericsMethod.
public void genericMethod(T data) (… )
Zde je parametr typu vložen za modifikátor
public
a před návratový typ void
.
Obecnou metodu můžeme zavolat umístěním skutečného typu a
uvnitř závorky před název metody.
demo.genericMethod("Java Programming"); demo.genericMethod(25);
Poznámka : Můžeme volat generickou metodu bez zahrnutí parametru type. Například,
demo.genericsMethod("Java Programming");
V tomto případě může kompilátor odpovídat parametru typu na základě hodnoty předané metodě.
Ohraničené typy
Obecně platí, že parametr typu může přijímat jakékoli datové typy (kromě primitivních typů).
Pokud však chceme použít generika pouze pro některé konkrétní typy (například přijmout data číselných typů), můžeme použít omezené typy.
V případě vázaných typů používáme extends
klíčové slovo. Například,
To znamená, že T může přijímat pouze data, která jsou podtypy A.
Příklad: Ohraničené typy
class GenericsClass ( public void display() ( System.out.println("This is a bounded type generics class."); ) ) class Main ( public static void main(String() args) ( // create an object of GenericsClass GenericsClass obj = new GenericsClass(); ) )
Ve výše uvedeném příkladu jsme vytvořili třídu s názvem GenericsClass. Všimněte si výrazu, všimněte si výrazu
Zde je GenericsClass vytvořen s ohraničeným typem. To znamená, že GenericsClass může pracovat pouze s datovými typy, které jsou podřízenými objekty Number
( Integer
, Double
atd.).
Vytvořili jsme však objekt třídy generik s String
. V takovém případě se zobrazí následující chyba.
GenericsClass obj = new GenericsClass (); důvod: odvozená proměnná T má nekompatibilní hranice omezení rovnosti: Řetězec dolní hranice: Číslo, kde T je proměnná typu: T rozšiřuje Číslo deklarované ve třídě GenericsClass
Výhody Java Generics
1. Opakovaná použitelnost kódu
S pomocí generik v Javě můžeme psát kód, který bude pracovat s různými typy dat. Například,
public void genericsMethod(T data) (… )
Zde jsme vytvořili obecnou metodu. Tuto stejnou metodu lze použít k provedení operací s celočíselnými daty, řetězcovými daty atd.
2. Kontrola typu v době kompilace
Parametr typu generik poskytuje informace o typu dat použitých v generickém kódu. Například,
// using Generics GenericsClass list = new GenericsClass();
Tady víme, že GenericsClass pracuje Integer
pouze s daty.
Nyní, když se pokusíme předat do této třídy jiná data než Integer, program vygeneruje chybu v době kompilace.
3. Používá se u sbírek
Rámec sbírek používá koncept generik v Javě. Například,
// creating a string type ArrayList ArrayList list1 = new ArrayList(); // creating a integer type ArrayList ArrayList list2 = new ArrayList();
Ve výše uvedeném příkladu jsme pro práci s různými typy dat použili stejnou třídu ArrayList.
Podobně jako ArrayList
ostatní fondy ( LinkedList
, Queue
, Maps
a tak dále) jsou také generické v Javě.