In deze tutorial zullen we leren over Java Generics, hoe generieke klassen en methoden kunnen worden gemaakt en de voordelen ervan met behulp van voorbeelden.
De Java Generics stelt ons in staat om een enkele klasse, interface en methode te creëren die kan worden gebruikt met verschillende soorten gegevens (objecten).
Dit helpt ons om onze code opnieuw te gebruiken.
Opmerking : Generics werkt niet met primitieve types ( int
, float
, char
, etc).
Java Generics-klasse
We kunnen een klasse maken die kan worden gebruikt met elk type gegevens. Zo'n klasse staat bekend als Generics Class.
Hier is hoe we een generieke klasse in Java kunnen maken:
Voorbeeld: maak een generieke klasse
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; ) )
Uitvoer
Generic Class retourneert: 5 Generic Class retourneert: Java Programming
In het bovenstaande voorbeeld hebben we een generieke klasse gemaakt met de naam GenericsClass. Deze klasse kan worden gebruikt om met elk type gegevens te werken.
class GenericsClass (… )
Hier geeft T gebruikt in de hoekbeugel de typeparameter aan . Binnen de
Main
klas hebben we twee objecten van GenericsClass gemaakt
- intObj - Hier wordt de typeparameter T vervangen door
Integer
. Nu werkt de GenericsClass met gehele getallen. - stringObj - Hier wordt de typeparameter T vervangen door
String
. Nu werkt de GenericsClass met stringgegevens.
Java Generics-methode
Net als bij de generieke klasse, kunnen we ook een methode maken die met elk type gegevens kan worden gebruikt. Zo'n klasse staat bekend als Generics Method.
Hier is hoe we een generieke klasse in Java kunnen maken:
Voorbeeld: maak een generieke methode
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); ) )
Uitvoer
Generieke methode: doorgegeven gegevens: Java-programmering Generieke methode: doorgegeven gegevens: 25
In het bovenstaande voorbeeld hebben we een generieke methode gemaakt met de naam genericsMethod.
public void genericMethod(T data) (… )
Hier wordt de parameter type ingevoegd na de modifier
public
en vóór het retourtype void
.
We kunnen de generieke methode aanroepen door het daadwerkelijke type en
binnen de haakjes voor de naam van de methode te plaatsen.
demo.genericMethod("Java Programming"); demo.genericMethod(25);
Opmerking : we kunnen de generieke methode aanroepen zonder de parameter type op te nemen. Bijvoorbeeld,
demo.genericsMethod("Java Programming");
In dit geval kan de compiler de parameter type matchen op basis van de waarde die aan de methode is doorgegeven.
Begrensde typen
Over het algemeen kan de parameter type alle gegevenstypen accepteren (behalve primitieve typen).
Als we generieke typen echter alleen voor sommige specifieke typen willen gebruiken (zoals het accepteren van gegevens van typen nummers), dan kunnen we begrensde typen gebruiken.
In het geval van gebonden typen gebruiken we het extends
trefwoord. Bijvoorbeeld,
Dit betekent dat T alleen gegevens kan accepteren die subtypen zijn van A.
Voorbeeld: gebonden typen
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(); ) )
In het bovenstaande voorbeeld hebben we een klasse gemaakt met de naam GenericsClass. Let op de uitdrukking, let op de uitdrukking
Hier wordt GenericsClass gemaakt met begrensd type. Dit betekent GenericsClass kan alleen werken met typen gegevens die zijn kinderen van Number
( Integer
, Double
en ga zo maar door).
We hebben echter een object van de generieke klasse gemaakt met String
. In dit geval krijgen we de volgende foutmelding.
GenericsClass obj = nieuwe GenericsClass (); Reden: inferentievariabele T heeft incompatibele grenzen gelijkheidsbeperkingen: String ondergrenzen: Getal waarbij T een typevariabele is: T extends Getal gedeclareerd in klasse GenericsClass
Voordelen van Java Generics
1. Herbruikbaarheid van code
Met behulp van generieke geneesmiddelen in Java kunnen we code schrijven die met verschillende soorten gegevens werkt. Bijvoorbeeld,
public void genericsMethod(T data) (… )
Hier hebben we een generieke methode ontwikkeld. Dezelfde methode kan worden gebruikt om bewerkingen uit te voeren op gegevens van gehele getallen, gegevens van tekenreeksen, enzovoort.
2. Compilatietijd Type Controle
De parameter type van generics geeft informatie over het type gegevens dat in de generieke code wordt gebruikt. Bijvoorbeeld,
// using Generics GenericsClass list = new GenericsClass();
Hier weten we dat GenericsClass Integer
alleen met gegevens werkt .
Als we nu proberen om andere gegevens dan Integer aan deze klasse door te geven, zal het programma tijdens het compileren een fout genereren.
3. Gebruikt met verzamelingen
Het verzamelingsraamwerk gebruikt het concept van generieke geneesmiddelen in Java. Bijvoorbeeld,
// creating a string type ArrayList ArrayList list1 = new ArrayList(); // creating a integer type ArrayList ArrayList list2 = new ArrayList();
In het bovenstaande voorbeeld hebben we dezelfde klasse ArrayList gebruikt om met verschillende soorten gegevens te werken.
Net als bij ArrayList
andere collecties ( LinkedList
, Queue
, Maps
, enzovoort) zijn ook generieke in Java.