logo

Wildcards în Java

În Java Generics, caracterele metalice sunt folosite atunci când nu cunoașteți tipul exact. Vă permit să scrieți cod flexibil și reutilizabil. Wildcardul este reprezentat de un ? (semnul de întrebare). Wildcardurile sunt utilizate în principal în parametrii metodei pentru a accepta diferite tipuri generice în siguranță.

Tipuri de wildcards în Java

1. Caractere metalice delimitate superioare

Aceste metacaractere pot fi folosite atunci când doriți să relaxați restricțiile asupra unei variabile. De exemplu, să presupunem că doriți să scrieți o metodă care funcționează pe Listă< Integer >Listă< Double >și Listă< Number >puteți face acest lucru folosind un wildcard delimitat superior. 

Pentru a declara un wildcard cu limite superioare, utilizați caracterul wildcard ('?') urmat de cuvântul cheie extins urmat de limita sa superioară. 



public static void add(Listalistă)

ce este o stivă în java

Implementare:

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

Ieșire
Total sum is:22.0 Total sum is:15.299999999999999

Explicaţie: În programul de mai sus, list1 conține valori întregi și list2 conține valori duble. Ambele sunt trecute la metoda sum care folosește un wildcard. Aceasta înseamnă că poate accepta orice listă de tip care este o subclasă de Număr, cum ar fi Integer sau Double.

2. Wildcards delimitate inferioară

Acesta este exprimat folosind caracterul wildcard ('?') urmat de cuvântul cheie super urmat de limita sa inferioară:

sortare selecție în java

Sintaxă: Tipul de colecție

Implementare: 

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

Ieșire
[4 5 6 7] [4 5 6 7]

Explicaţie: Aici metoda printOnlyIntegerClassorSuperClass acceptă numai Integer sau superclasele sale (cum ar fi Number). Dacă încercați să treceți o listă de Double, aceasta dă o eroare de compilare, deoarece Double nu este o superclasă de Integer.

Nota: Folosiți caracterul joker extins când doriți să obțineți valori dintr-o structură și un caracter joker super când introduceți valori într-o structură. Nu utilizați wildcard atunci când obțineți și puneți valori într-o structură. Puteți specifica o limită superioară pentru un wildcard sau puteți specifica o limită inferioară, dar nu le puteți specifica pe ambele.

3. Wildcard nelimitat

Acest tip de wildcard este specificat folosind caracterul wildcard (?), de exemplu Listă. Aceasta se numește o listă de tipuri necunoscute. Acestea sunt utile în următoarele cazuri -

formula mason
  • Când scrieți o metodă care poate fi folosită folosind funcționalitatea oferită în clasa Object.
  • Când codul folosește metode din clasa generică care nu depinde de parametrul tip

Implementare:

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

Ieșire
[1 2 3] [1.1 2.2 3.3]


Creați un test