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
, char
atď.)
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
Main
triede 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
public
a 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 extends
kľúč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
, Double
atď.).
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 Integer
iba 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 ArrayList
ostatné fondy ( LinkedList
, Queue
, Maps
a tak ďalej) sú tiež generické v Jave.