A Java Generics s'utilitzen comodins quan no en coneixeu el tipus exacte. Et permeten escriure codi flexible i reutilitzable. El comodí es representa amb un ? (signe d'interrogació). Els comodins s'utilitzen principalment en els paràmetres del mètode per acceptar diferents tipus genèrics de manera segura.
Tipus de comodins a Java
1. Comodins amb límit superior
Aquests comodins es poden utilitzar quan es volen relaxar les restriccions d'una variable. Per exemple, digueu que voleu escriure un mètode que funcioni a la llista< Integer >Llista< Double >i Llista< Number >podeu fer-ho utilitzant un comodí delimitat superior.
Per declarar un comodí amb límit superior, utilitzeu el caràcter comodí ('?') seguit de la paraula clau extends seguida del seu límit superior.
public static void add (Llista extends Number>llista)
desar el vídeo de youtube vlc
Implementació:
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; } }
Sortida
Total sum is:22.0 Total sum is:15.299999999999999
Explicació: Al programa anterior, list1 conté valors enters i list2 conté valors dobles. Tots dos es passen al mètode de suma que utilitza un comodí extends Number>. Això significa que pot acceptar qualsevol llista d'un tipus que sigui una subclasse de Nombre com Integer o Double.
2. Comodins amb límit inferior
S'expressa mitjançant el caràcter comodí ('?') seguit de la super paraula clau seguida del seu límit inferior: super A>.
sql selecciona com
Sintaxi: Tipus de col·lecció super A>
Implementació:
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); } }
Sortida
[4 5 6 7] [4 5 6 7]
Explicació: Aquí el mètode printOnlyIntegerClassorSuperClass només accepta Integer o les seves superclasses (com Number). Si proveu de passar una llista de Double, es produeix un error en temps de compilació perquè Double no és una superclasse d'Integer.
bous vs bou
Nota: Utilitzeu el comodí d'extensió quan vulgueu treure valors d'una estructura i el super comodí quan poseu valors en una estructura. No utilitzeu el comodí quan obteniu i poseu valors en una estructura. Podeu especificar un límit superior per a un comodí o podeu especificar un límit inferior però no podeu especificar tots dos.
3. Comodí il·limitat
Aquest tipus de comodí s'especifica mitjançant el caràcter comodí (?), per exemple, Llista. Això s'anomena llista de tipus desconeguts. Són útils en els casos següents:
- Quan s'escriu un mètode que es pot utilitzar mitjançant la funcionalitat proporcionada a la classe Object.
- Quan el codi utilitza mètodes de la classe genèrica que no depèn del paràmetre tipus
Implementació:
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); } }
Sortida
[1 2 3] [1.1 2.2 3.3]