I Java Generics brukes jokertegn når du ikke vet den eksakte typen. De lar deg skrive fleksibel og gjenbrukbar kode. Jokertegnet er representert av en ? (spørsmålstegn). Jokertegn brukes hovedsakelig i metodeparametere for å akseptere forskjellige generiske typer trygt.
Typer jokertegn i Java
1. Jokertegn med øvre grense
Disse jokertegnene kan brukes når du vil lempe på restriksjonene på en variabel. For eksempel si at du vil skrive en metode som fungerer på List< Integer >Liste< Double >og Liste< Number >du kan gjøre dette ved å bruke et jokertegn med øvre grense.
For å deklarere et jokertegn med øvre grense, bruk jokertegnet ('?') etterfulgt av extends-nøkkelordet etterfulgt av øvre grense.
offentlig statisk void add(List extends Number>liste)
hvordan konvertere streng til heltall
Implementering:
Javaimport java.util.Arrays; import java.util.List; class WildcardDemo { public static void main(String[] args) { // Upper Bounded Integer List List<Integer> list1 = Arrays.asList(4 5 6 7); System.out.println('Total sum is:' + sum(list1)); // Double list List<Double> list2 = Arrays.asList(4.1 5.1 6.1); System.out.print('Total sum is:' + sum(list2)); } private static double sum(List extends Number> list) { double sum = 0.0; for (Number i : list) { sum += i.doubleValue(); } return sum; } }
Produksjon
Total sum is:22.0 Total sum is:15.299999999999999
Forklaring: I programmet ovenfor inneholder liste1 heltallsverdier og liste2 inneholder doble verdier. Begge sendes til summetoden som bruker et jokertegn extends Number>. Dette betyr at den kan godta en hvilken som helst liste av en type som er en underklasse av Number som heltall eller dobbel.
2. Nedre avgrensede jokertegn
Det uttrykkes ved hjelp av jokertegnet ('?') etterfulgt av supernøkkelordet etterfulgt av dets nedre grense: super A>.
1 million tall
Syntaks: Samlingstype super A>
Implementering:
Javaimport java.util.Arrays; import java.util.List; class WildcardDemo { public static void main(String[] args) { // Lower Bounded Integer List List<Integer> list1 = Arrays.asList(4 5 6 7); // Integer list object is being passed printOnlyIntegerClassorSuperClass(list1); // Number list List<Number> list2 = Arrays.asList(4 5 6 7); // Integer list object is being passed printOnlyIntegerClassorSuperClass(list2); } public static void printOnlyIntegerClassorSuperClass( List super Integer> list) { System.out.println(list); } }
Produksjon
[4 5 6 7] [4 5 6 7]
Forklaring: Her aksepterer metoden printOnlyIntegerClassorSuperClass bare Integer eller dets superklasser (som Number). Hvis du prøver å sende en liste over Double, gir det en kompileringstidsfeil fordi Double ikke er en superklasse av Integer.
sammenføyninger og sammenføyningstyper
Note: Bruk forleng jokertegn når du ønsker å få verdier ut av en struktur og superjokertegn når du setter verdier i en struktur. Ikke bruk jokertegn når du får og legger verdier i en struktur. Du kan spesifisere en øvre grense for et jokertegn, eller du kan angi en nedre grense, men du kan ikke spesifisere begge.
3. Ubegrenset jokertegn
Denne jokertegntypen er spesifisert ved å bruke jokertegnet (?) for eksempel List. Dette kalles en liste over ukjente typer. Disse er nyttige i følgende tilfeller -
- Når du skriver en metode som kan brukes ved hjelp av funksjonalitet i Object-klassen.
- Når koden bruker metoder i den generiske klassen, avhenger det ikke av typeparameteren
Implementering:
Javaimport java.util.Arrays; import java.util.List; class unboundedwildcardemo { public static void main(String[] args) { // Integer List List<Integer> list1 = Arrays.asList(1 2 3); // Double list List<Double> list2 = Arrays.asList(1.1 2.2 3.3); printlist(list1); printlist(list2); } private static void printlist(List> list) { System.out.println(list); } }
Produksjon
[1 2 3] [1.1 2.2 3.3]