Det vore trevligt om vi kunde skriva en enda sorteringsmetod som skulle kunna sortera elementen i en heltalarray, en strängmatris , eller en matris av vilken typ som helst som stöder beställning.
Java Generiska metoder och generiska klasser gör det möjligt för programmerare att med en enda metoddeklaration ange en uppsättning relaterade metoder eller med en enskild klassdeklaration av relaterade typer, respektive.
Generics ger också kompileringssäkerhetstyp som gör det möjligt för programmerare att fånga ogiltiga typer vid kompileringstidpunkten.
Med Java Generic-koncept kan vi skriva en generisk metod för att sortera en matris med objekt, anropa sedan den generiska metoden med heltalmatriser, dubbelmatriser, strängmatriser och så vidare för att sortera matriselementen.
Generiska metoder
Du kan skriva en enda generisk metoddeklaration som kan vara ca fylld med argument av olika slag. Baserat på de typer av argument som skickas till den generiska metoden hanterar kompilatorn varje metodanrop på lämpligt sätt. Följande är regler för att definiera generiska metoder –
-
Alla generiska metoddeklarationer har en typparametersektion avgränsad med vinkelparenteser (< och >) som föregår metoden ”s returtyp (< E > i nästa exempel
-
Varje typparametersektion innehåller en eller flera typparametrar separerade med kommatecken. En typparameter, även känd som typvariabel, är en identifierare som anger ett generiskt typnamn .
-
Typparametrarna kan användas för att deklarera returtypen och fungera som platshållare för de typer av argument som skickas till den generiska metoden, som kallas faktiska typargument.
-
En generisk metods kropp förklaras som för alla andra metoder. Observera att typparametrar endast kan representera referenstyper, inte primitiva typer (som int, dubbel och char).
Exempel
Följande exempel illustrerar hur vi kan skriva ut en matris av olika typ med en enda generisk metod –
Detta ger följande 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
Avgränsade typparametrar
Det kan finnas tillfällen när du vill begränsa de typer av typer som får överföras till en typparameter. Till exempel kan en metod som fungerar på siffror vill bara acceptera förekomster av Number eller dess underklasser. Detta är vad parametrarna för avgränsad typ är för.
För att deklarera en avgränsad typparameter, lista typparameterns namn följt av det utvidade nyckelordet, följt av dess övre gräns.
Exempel
Följande exempel illustrerar hur extends används i allmänhet för att betyda antingen ”extends” (som i klasser) eller ”implementerar” (som i gränssnitt) . Detta exempel är generisk metod för att returnera det största av tre jämförbara objekt –
Detta ger följande 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
Generiska klasser
En generisk klassdeklaration ser ut som en icke-generisk klassdeklaration, förutom att klassnamnet följs av en sektion för typparametrar.
Som med generisk metoder kan typparametersektionen i en generisk klass ha en eller flera typparametrar åtskilda av kommatecken. Dessa klasser kallas parametrerade klasser eller parametrerade typer eftersom de accepterar en eller flera parametrar.
Exempel
Följande exempel illustrerar hur vi kan definiera en generisk klass –
Detta ger följande resultat –
Output
Integer Value :10String Value :Hello World