In Java Generics i caratteri jolly vengono utilizzati quando non se ne conosce il tipo esatto. Ti consentono di scrivere codice flessibile e riutilizzabile. Il carattere jolly è rappresentato da un ? (punto interrogativo). I caratteri jolly vengono utilizzati principalmente nei parametri del metodo per accettare diversi tipi generici in modo sicuro.
Tipi di caratteri jolly in Java
1. Caratteri jolly con limite superiore
Questi caratteri jolly possono essere utilizzati quando si desidera allentare le restrizioni su una variabile. Ad esempio, supponiamo che tu voglia scrivere un metodo che funzioni su List< Integer >Lista< Double >ed Elenco< Number >puoi farlo usando un carattere jolly con limite superiore.
Per dichiarare un carattere jolly con limite superiore utilizzare il carattere jolly ('?') seguito dalla parola chiave extends seguita dal suo limite superiore.
public static void add(List extends Number>lista)
cos'è uno stack in Java
Attuazione:
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; } }
Produzione
Total sum is:22.0 Total sum is:15.299999999999999
Spiegazione: Nel programma sopra list1 contiene valori interi e list2 contiene valori doppi. Entrambi vengono passati al metodo sum che utilizza un carattere jolly extends Number>. Ciò significa che può accettare qualsiasi elenco di un tipo che sia una sottoclasse di Number come Integer o Double.
2. Caratteri jolly con limite inferiore
Si esprime utilizzando il carattere jolly ('?') seguito dalla parola chiave super seguita dal suo limite inferiore: super A>.
ipconfig per Ubuntu
Sintassi: Tipo di raccolta super A>
Attuazione:
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); } }
Produzione
[4 5 6 7] [4 5 6 7]
Spiegazione: Qui il metodo printOnlyIntegerClassorSuperClass accetta solo Integer o le sue superclassi (come Number). Se provi a passare un elenco di Double viene generato un errore in fase di compilazione perché Double non è una superclasse di Integer.
Java ha il prossimo
Nota: Utilizza il carattere jolly esteso quando vuoi ottenere valori da una struttura e il carattere jolly super quando inserisci valori in una struttura. Non utilizzare caratteri jolly quando ottieni e inserisci valori in una struttura. È possibile specificare un limite superiore per un carattere jolly oppure un limite inferiore ma non è possibile specificarli entrambi.
3. Carattere jolly illimitato
Questo tipo di carattere jolly viene specificato utilizzando il carattere jolly (?), ad esempio List. Questo è chiamato elenco di tipi sconosciuti. Questi sono utili nei seguenti casi:
- Quando si scrive un metodo che può essere utilizzato utilizzando le funzionalità fornite nella classe Object.
- Quando il codice utilizza metodi nella classe generica che non dipendono dal parametro type
Attuazione:
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); } }
Produzione
[1 2 3] [1.1 2.2 3.3]