logo

Wildcards op Java

In Java Generics worden jokertekens gebruikt als u het exacte type niet weet. Hiermee kunt u flexibele en herbruikbare code schrijven. Het jokerteken wordt weergegeven door een ? (vraagteken). Jokertekens worden voornamelijk gebruikt in methodeparameters om verschillende generieke typen veilig te accepteren.

Soorten jokertekens in Java

1. Bovengrens jokertekens

Deze jokertekens kunnen worden gebruikt als u de beperkingen voor een variabele wilt versoepelen. Stel bijvoorbeeld dat u een methode wilt schrijven die op List werkt< Integer >Lijst< Double >en Lijst< Number >U kunt dit doen met behulp van een jokerteken met een bovengrens. 

Om een ​​jokerteken met een bovengrens te declareren, gebruikt u het jokerteken ('?'), gevolgd door het trefwoord extends, gevolgd door de bovengrens ervan. 



public static void add(Listlijst)

arrays retourneren in Java

Uitvoering:

Java
import 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;  } } 

Uitvoer
Total sum is:22.0 Total sum is:15.299999999999999

Uitleg: In het bovenstaande programma bevat lijst1 gehele waarden en lijst2 dubbele waarden. Beide worden doorgegeven aan de sommethode die een jokerteken gebruikt. Dit betekent dat het elke lijst kan accepteren van een type dat een subklasse is van Number, zoals Integer of Double.

2. Wildcards met ondergrens

Het wordt uitgedrukt met behulp van het jokerteken ('?'), gevolgd door het supertrefwoord gevolgd door de ondergrens:

Python sorteert tupels

Syntaxis: Collectietype

Uitvoering: 

Java
import 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);  } } 

Uitvoer
[4 5 6 7] [4 5 6 7]

Uitleg: Hier accepteert de methode printOnlyIntegerClassorSuperClass alleen Integer of zijn superklassen (zoals Number). Als u een lijst met Double probeert door te geven, geeft dit een compileerfout omdat Double geen superklasse van Integer is.

wat is clusteren

Opmerking: Gebruik Extend Wildcard als u waarden uit een structuur wilt halen en Super Wildcard als u waarden in een structuur plaatst. Gebruik geen jokertekens wanneer u waarden in een structuur ophaalt en plaatst. U kunt een bovengrens voor een jokerteken opgeven, of u kunt een ondergrens opgeven, maar u kunt niet beide opgeven.

3. Onbegrensde jokerteken

Dit jokertekentype wordt opgegeven met behulp van het jokerteken (?), bijvoorbeeld Lijst. Dit wordt een lijst met onbekende typen genoemd. Deze zijn nuttig in de volgende gevallen -

  • Bij het schrijven van een methode die kan worden gebruikt met behulp van functionaliteit uit de Object-klasse.
  • Wanneer de code methoden in de generieke klasse gebruikt, is deze niet afhankelijk van de parameter type

Uitvoering:

Java
import 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);  } } 

Uitvoer
[1 2 3] [1.1 2.2 3.3]


Quiz maken