En Java genéricos, los comodines se utilizan cuando no se sabe el tipo exacto. Te permiten escribir código flexible y reutilizable. El comodín está representado por ? (signo de interrogación). Los comodines se utilizan principalmente en los parámetros del método para aceptar diferentes tipos genéricos de forma segura.
Tipos de comodines en Java
1. Comodines de límite superior
Estos comodines se pueden utilizar cuando desee relajar las restricciones de una variable. Por ejemplo, digamos que desea escribir un método que funcione en Lista< Integer >Lista< Double >y lista< Number >puedes hacer esto usando un comodín de límite superior.
Para declarar un comodín de límite superior, utilice el carácter comodín ('?') seguido de la palabra clave extends seguida de su límite superior.
agregar vacío estático público (lista extends Number>lista)
formatear fecha en cadena
Implementación:
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; } }
Producción
Total sum is:22.0 Total sum is:15.299999999999999
Explicación: En el programa anterior, la lista1 contiene valores enteros y la lista2 contiene valores dobles. Ambos se pasan al método de suma que utiliza un comodín. extends Number>. Esto significa que puede aceptar cualquier lista de un tipo que sea una subclase de Número como Integer o Double.
2. Comodines con límites inferiores
Se expresa utilizando el carácter comodín ('?') seguido de la palabra clave super seguida de su límite inferior: super A>.
objeto java a json
Sintaxis: Tipo de colección super A>
Implementación:
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); } }
Producción
[4 5 6 7] [4 5 6 7]
Explicación: Aquí el método printOnlyIntegerClassorSuperClass acepta solo Integer o sus superclases (como Number). Si intenta pasar una lista de Double, obtendrá un error en tiempo de compilación porque Double no es una superclase de Integer.
Nota: Utilice el comodín extendido cuando desee obtener valores de una estructura y el super comodín cuando coloque valores en una estructura. No utilice comodines cuando obtenga y coloque valores en una estructura. Puede especificar un límite superior para un comodín o puede especificar un límite inferior, pero no puede especificar ambos.
3. Comodín ilimitado
Este tipo de comodín se especifica mediante el carácter comodín (?), por ejemplo, Lista. Esto se llama lista de tipos desconocidos. Estos son útiles en los siguientes casos:
leer archivo excel en java
- Al escribir un método que se puede emplear utilizando la funcionalidad proporcionada en la clase Objeto.
- Cuando el código usa métodos en la clase genérica que no depende del parámetro de tipo
Implementación:
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); } }
Producción
[1 2 3] [1.1 2.2 3.3]