În acest tutorial, vom învăța despre Java Generics, cum să creați clase și metode generice și avantajele sale cu ajutorul exemplelor.
Java Generics ne permite să creăm o singură clasă, interfață și metodă care pot fi utilizate cu diferite tipuri de date (obiecte).
Acest lucru ne ajută să ne refolosim codul.
Notă : Generice nu funcționează cu tipuri primitive ( int
, float
, char
etc).
Clasa Java Generics
Putem crea o clasă care poate fi utilizată cu orice tip de date. O astfel de clasă este cunoscută sub numele de Generics Class.
Iată cum putem crea o clasă generică în Java:
Exemplu: Creați o clasă Generics
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; ) )
Ieșire
Returnează Generic Class: 5 Returnează Generic Class: Programare Java
În exemplul de mai sus, am creat o clasă generică numită GenericsClass. Această clasă poate fi utilizată pentru a lucra cu orice tip de date.
class GenericsClass (… )
Aici, T folosit în interiorul parantezei unghiulare indică parametrul de tip . În cadrul
Main
clasei, am creat două obiecte ale GenericsClass
- intObj - Aici, parametrul de tip T este înlocuit cu
Integer
. Acum, GenericsClass funcționează cu date întregi. - stringObj - Aici, parametrul de tip T este înlocuit cu
String
. Acum, GenericsClass funcționează cu date șir.
Metoda Java Generics
Similar clasei generice, putem crea și o metodă care poate fi utilizată cu orice tip de date. O astfel de clasă este cunoscută sub numele de Metoda Generică.
Iată cum putem crea o clasă generică în Java:
Exemplu: Creați o metodă generică
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); ) )
Ieșire
Metodă generică: date transmise: programare Java Metodă generice: date transmise: 25
În exemplul de mai sus, am creat o metodă generică numită genericsMethod.
public void genericMethod(T data) (… )
Aici, parametrul de tip este inserat după modificator
public
și înainte de tipul de returnare void
.
Putem apela metoda generică plasând tipul real și
în paranteză înaintea numelui metodei.
demo.genericMethod("Java Programming"); demo.genericMethod(25);
Notă : Putem apela metoda generică fără a include parametrul tip. De exemplu,
demo.genericsMethod("Java Programming");
În acest caz, compilatorul poate potrivi parametrul de tip pe baza valorii transmise metodei.
Tipuri limitate
În general, parametrul type poate accepta orice tipuri de date (cu excepția tipurilor primitive).
Cu toate acestea, dacă dorim să folosim generice doar pentru anumite tipuri specifice (cum ar fi acceptarea datelor de tipuri de numere) numai, atunci putem folosi tipuri mărginite.
În cazul tipurilor legate, folosim extends
cuvântul cheie. De exemplu,
Aceasta înseamnă că T poate accepta doar date care sunt subtipuri de A.
Exemplu: tipuri limitate
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(); ) )
În exemplul de mai sus, am creat o clasă numită GenericsClass. Observați expresia, observați expresia
Aici, GenericsClass este creat cu tip mărginit. Aceasta înseamnă că GenericsClass poate lucra numai cu tipuri de date , care sunt copiii Number
( Integer
, Double
și așa mai departe).
Cu toate acestea, am creat un obiect al clasei generice cu String
. În acest caz, vom primi următoarea eroare.
GenericsClass obj = new GenericsClass (); motiv: variabila de inferență T are limite incompatibile constrângeri de egalitate: Limite inferioare ale șirului: Numărul în care T este o variabilă de tip: T se extinde Numărul declarat în clasa GenericsClass
Avantajele Java Generics
1. Reutilizarea codului
Cu ajutorul genericelor din Java, putem scrie cod care va funcționa cu diferite tipuri de date. De exemplu,
public void genericsMethod(T data) (… )
Aici, am creat o metodă generică. Aceeași metodă poate fi utilizată pentru a efectua operații pe date întregi, date șiruri și așa mai departe.
2. Verificare tip timp de compilare
Parametrul tip de generice oferă informații despre tipul de date utilizate în codul generice. De exemplu,
// using Generics GenericsClass list = new GenericsClass();
Aici, știm că GenericsClass funcționează Integer
numai cu date.
Acum, dacă încercăm să transmitem date altele decât Integer către această clasă, programul va genera o eroare la momentul compilării.
3. Folosit cu colecții
Cadrul colecțiilor folosește conceptul de generice în Java. De exemplu,
// creating a string type ArrayList ArrayList list1 = new ArrayList(); // creating a integer type ArrayList ArrayList list2 = new ArrayList();
În exemplul de mai sus, am folosit aceeași clasă ArrayList pentru a lucra cu diferite tipuri de date.
Similar cu ArrayList
alte colecții ( LinkedList
, Queue
, Maps
și așa mai departe) sunt , de asemenea , generice în Java.