Java Generics (med eksempler)

I denne vejledning lærer vi om Java Generics, hvordan man opretter generiske klasser og metoder og dets fordele ved hjælp af eksempler.

Java Generics giver os mulighed for at oprette en enkelt klasse, grænseflade og metode, der kan bruges med forskellige typer data (objekter).

Dette hjælper os med at genbruge vores kode.

Bemærk : Generics virker ikke med primitive typer ( int, float, char, osv).

Java Generics-klasse

Vi kan oprette en klasse, der kan bruges med alle typer data. En sådan klasse er kendt som Generics Class.

Her er hvordan vi kan oprette en generisk klasse i Java:

Eksempel: Opret en generisk 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; ) )

Produktion

 Generisk klasse returnerer: 5 Generisk klasse returnerer: Java-programmering

I ovenstående eksempel har vi oprettet en generisk klasse ved navn GenericsClass. Denne klasse kan bruges til at arbejde med alle typer data.

 class GenericsClass (… )

Her, T bruges inde vinkelbeslag angiver typen parameter . Inde i Mainklassen har vi oprettet to objekter af GenericsClass

  • intObj - Her erstattes typeparameteren T med Integer. Nu fungerer GenericsClass med heltalsdata.
  • stringObj - Her erstattes typeparameteren T med String. Nu fungerer GenericsClass med strengdata.

Java Generics-metode

I lighed med generikerklassen kan vi også oprette en metode, der kan bruges med alle typer data. En sådan klasse er kendt som Generics Method.

Her er hvordan vi kan oprette en generisk klasse i Java:

Eksempel: Opret en generisk metode

 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); ) )

Produktion

 Generisk metode: Data bestået: Java Programmering Generisk metode: Data bestået: 25

I ovenstående eksempel har vi oprettet en generisk metode med navnet genericsMethod.

 public void genericMethod(T data) (… )

Her indsættes typeparameteren efter modifikatoren publicog før returtypen void.

Vi kan kalde den generiske metode ved at placere den aktuelle type og inden i parentes før metodens navn.

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

Bemærk : Vi kan kalde den generiske metode uden at inkludere typeparameteren. For eksempel,

 demo.genericsMethod("Java Programming");

I dette tilfælde kan compileren matche typeparameteren baseret på den værdi, der sendes til metoden.

Afgrænsede typer

Generelt typen parameter kan acceptere datatyper (undtagen primitive typer).

Men hvis vi kun vil bruge generiske produkter til nogle specifikke typer (såsom at acceptere data af nummertyper), kan vi dog bruge afgrænsede typer.

I tilfælde af bundne typer bruger vi extendsnøgleordet. For eksempel,

 

Dette betyder, at T kun kan acceptere data, der er undertyper af A.

Eksempel: Afgrænsede typer

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

I ovenstående eksempel har vi oprettet en klasse ved navn GenericsClass. Læg mærke til udtrykket, læg mærke til udtrykket

  

Her oprettes GenericsClass med afgrænset type. Det betyder GenericsClass kan kun arbejde med datatyper, der er børn af Number( Integer, Double, og så videre).

However, we have created an object of the generics class with String. In this case, we will get the following error.

 GenericsClass obj = new GenericsClass(); reason: inference variable T has incompatible bounds equality constraints: String lower bounds: Number where T is a type-variable: T extends Number declared in class GenericsClass

Advantages of Java Generics

1. Code Reusability

With the help of generics in Java, we can write code that will work with different types of data. For example,

 public void genericsMethod(T data) (… )

Here, we have created a generics method. This same method can be used to perform operations on integer data, string data, and so on.

2. Compile-time Type Checking

The type parameter of generics provides information about the type of data used in the generics code. For example,

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

Her ved vi, at GenericsClass kun arbejder med Integerdata.

Nu, hvis vi forsøger at videregive andre data end heltal til denne klasse, genererer programmet en fejl på kompileringstidspunktet.

3. Brugt med samlinger

Samlingens ramme bruger begrebet generics i Java. For eksempel,

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

I eksemplet ovenfor har vi brugt den samme ArrayList-klasse til at arbejde med forskellige typer data.

Svarende til ArrayList, andre samlinger ( LinkedList, Queue, Maps, og så videre) er også generiske i Java.

Interessante artikler...