Java Generics (met voorbeelden)

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 Mainklas 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 publicen 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 extendstrefwoord. 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, Doubleen 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 Integeralleen 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 ArrayListandere collecties ( LinkedList, Queue, Maps, enzovoort) zijn ook generieke in Java.

Interessante artikelen...