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
Main
klassen 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
public
og 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 extends
nø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 Integer
data.
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.