Java Generics (s príkladmi)

V tomto tutoriále sa dozvieme o generike Java, ako pomocou príkladov vytvoriť triedu generík a metódy a ich výhody.

Java Generics nám umožňuje vytvoriť jednu triedu, rozhranie a metódu, ktorú je možné použiť s rôznymi typmi údajov (objektov).

To nám pomáha znovu použiť náš kód.

Poznámka : Generics nepracuje s primitívnymi typmi ( int, float, charatď.)

Trieda Java Generics

Môžeme vytvoriť triedu, ktorá sa dá použiť s akýmkoľvek typom údajov. Takáto trieda je známa ako Generics Class.

Takto môžeme vytvoriť generickú triedu v Jave:

Príklad: Vytvorte generickú triedu

 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ýkon

 Všeobecná návratnosť triedy: 5 Všeobecná návratnosť triedy: Programovanie v jazyku Java

Vo vyššie uvedenom príklade sme vytvorili generickú triedu s názvom GenericsClass. Túto triedu možno použiť na prácu s akýmkoľvek typom údajov.

 class GenericsClass (… )

Tu T použité vo vnútri uhlovej zátvorky označuje parameter typu . V Maintriede sme vytvorili dva objekty GenericsClass

  • intObj - Tu je typový parameter T nahradený Integer. Teraz GenericsClass pracuje s celočíselnými údajmi.
  • stringObj - Tu je typový parameter T nahradený String. GenericsClass teraz pracuje s údajmi reťazca.

Metóda Java Generics

Podobne ako v prípade triedy generík môžeme vytvoriť aj metódu, ktorú je možné použiť s akýmkoľvek typom údajov. Takáto trieda je známa ako Generická metóda.

Takto môžeme vytvoriť generickú triedu v Jave:

Príklad: Vytvorte všeobecnú metódu

 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ýkon

 Všeobecná metóda: Predané údaje: Programovanie v jazyku Java Všeobecná metóda: Predané údaje: 25

Vo vyššie uvedenom príklade sme vytvorili všeobecnú metódu s názvom genericsMethod.

 public void genericMethod(T data) (… )

Sem sa vkladá parameter typu za modifikátor publica pred návratový typ void.

Generickú metódu môžeme nazvať umiestnením skutočného typu a do zátvorky pred názov metódy.

 demo.genericMethod("Java Programming"); demo.genericMethod(25);

Poznámka : Môžeme zavolať generickú metódu bez zahrnutia parametra typu. Napríklad,

 demo.genericsMethod("Java Programming");

V takom prípade môže kompilátor priradiť parameter typu na základe hodnoty odovzdanej metóde.

Ohraničené typy

Všeobecne platí, že parameter typ môže prijať akékoľvek dátové typy (s výnimkou primitívne typy).

Ak však chceme použiť generiká iba pre niektoré konkrétne typy (napríklad prijať údaje číselných typov), môžeme použiť obmedzené typy.

V prípade viazaných typov používame extendskľúčové slovo. Napríklad,

 

To znamená, že T môže prijímať iba údaje, ktoré sú podtypmi A.

Prí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(); ) )

Vo vyššie uvedenom príklade sme vytvorili triedu s názvom GenericsClass. Všimnite si výraz, všimnite si výraz

  

Tu sa generická trieda vytvára s ohraničeným typom. To znamená, že GenericsClass môže pracovať iba s dátovými typmi, ktoré sú potomkami Number( Integer, Doubleatď.).

Vytvorili sme však objekt triedy generík s String. V takom prípade sa zobrazí nasledujúca chyba.

GenericsClass obj = new GenericsClass (); dôvod: odvodená premenná T má nekompatibilné obmedzenia obmedzenia rovnosti: String spodné hranice: Číslo, kde T je typová premenná: T rozširuje Číslo deklarované v triede GenericsClass

Výhody generík Java

1. Opätovná použiteľnosť kódu

Pomocou generík v Jave dokážeme napísať kód, ktorý bude pracovať s rôznymi typmi údajov. Napríklad,

 public void genericsMethod(T data) (… )

Tu sme vytvorili generickú metódu. Rovnakú metódu je možné použiť na vykonávanie operácií s celočíselnými údajmi, reťazcovými údajmi atď.

2. Kontrola typu kompilácie

Parameter typu generík poskytuje informácie o type údajov použitých v generickom kóde. Napríklad,

 // using Generics GenericsClass list = new GenericsClass();

Tu vieme, že GenericsClass pracuje Integeriba s údajmi.

Teraz, ak sa pokúsime odovzdať do tejto triedy iné údaje ako Integer, program vygeneruje chybu v čase kompilácie.

3. Používa sa so zbierkami

Rámec zbierok využíva koncept generík v Jave. Napríklad,

 // creating a string type ArrayList ArrayList list1 = new ArrayList(); // creating a integer type ArrayList ArrayList list2 = new ArrayList();

Vo vyššie uvedenom príklade sme na prácu s rôznymi typmi údajov použili rovnakú triedu ArrayList.

Podobne ako ArrayListostatné fondy ( LinkedList, Queue, Mapsa tak ďalej) sú tiež generické v Jave.

Zaujímavé články...