Java Generics (s příklady)

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, charatd.)

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ř Maintří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 publica 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 extendsklíč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, Doubleatd.).

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 Integerpouze 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 ArrayListostatní fondy ( LinkedList, Queue, Mapsa tak dále) jsou také generické v Javě.

Zajímavé články...