Det ville være rart, hvis vi kunne skrive en enkelt sorteringsmetode, der kunne sortere elementerne i et heltalarray, et strengarray eller en matrix af en hvilken som helst type, der understøtter bestilling.
Java Generiske metoder og generiske klasser gør det muligt for programmører at specificere et sæt relaterede metoder med en enkelt metadeklaration eller med en enkelt klassedeklaration et sæt af relaterede typer henholdsvis.
Generics giver også kompileringstidsikkerhed, der gør det muligt for programmører at fange ugyldige typer på kompileringstidspunktet.
Ved hjælp af Java Generic-konceptet skriver vi muligvis en generisk metode til sortering af en matrix af objekter, påkald derefter den generiske metode med heltal arrays, dobbelt arrays, streng arrays og så videre for at sortere array elementerne.
Generiske metoder
Du kan skrive en enkelt generisk metodedeklaration, der kan være ca. fyldt med argumenter af forskellige typer. Baseret på de typer af argumenter, der sendes til den generiske metode, håndterer compileren hver metodeopkald korrekt. Følgende er reglerne for at definere generiske metoder –
-
Alle generiske metodedeklarationer har en typeparametersektion afgrænset af vinkelparenteser (< og >), der går forud for metoden “s returtype (< E > i det næste eksempel
-
Hver type parametersektion indeholder en eller flere typeparametre adskilt af kommaer. En typeparameter, også kendt som en typevariabel, er en identifikator, der angiver et generisk typenavn .
-
Typeparametrene kan bruges til at erklære returtypen og fungere som pladsholdere for de typer af argumenter, der sendes til den generiske metode, som er kendt som faktiske typeargumenter.
-
En generisk metodes krop erklæres som for enhver anden metode. Bemærk, at typeparametre kun kan repræsentere referencetyper, ikke primitive typer (som int, double og char).
Eksempel
Følgende eksempel illustrerer, hvordan vi kan udskrive et array af forskellig type ved hjælp af en enkelt generisk metode –
Dette giver følgende resultat –
Output
Array integerArray contains:1 2 3 4 5 Array doubleArray contains:1.1 2.2 3.3 4.4 Array characterArray contains:H E L L O
Parameter for afgrænsede typer
Der kan være tidspunkter, hvor du vil begrænse de typer typer, der må overføres til en typeparameter. En metode, der fungerer på tal, kan f.eks. ønsker kun at acceptere forekomster af Number eller dets underklasser. Dette er hvad parametre for afgrænset type er til.
For at erklære en parameter for afgrænset type skal du angive typeparameterens navn efterfulgt af det udvidede søgeord efterfulgt af dens øvre grænse.
Eksempel
Følgende eksempel illustrerer, hvordan extends bruges i generel forstand til at betyde enten “extends” (som i klasser) eller “implementer” (som i interfaces) . Dette eksempel er generisk metode til at returnere det største af tre sammenlignelige objekter –
Dette giver følgende resultat –
Output
Max of 3, 4 and 5 is 5Max of 6.6,8.8 and 7.7 is 8.8Max of pear, apple and orange is pear
Generiske klasser
En generisk klassedeklaration ligner en ikke-generisk klassedeklaration, bortset fra at klassens navn efterfølges af et typeparameterafsnit.
Som med generisk metoder, kan typeparametersektionen i en generisk klasse have en eller flere typeparametre adskilt af kommaer. Disse klasser er kendt som parametrerede klasser eller parametrerede typer, fordi de accepterer en eller flere parametre.
Eksempel
Følgende eksempel illustrerer, hvordan vi kan definere en generisk klasse –
Dette giver følgende resultat –
Output
Integer Value :10String Value :Hello World