Em Java Generics, curingas são usados quando você não sabe o tipo exato. Eles permitem que você escreva código flexível e reutilizável. O curinga é representado por um ? (ponto de interrogação). Os curingas são usados principalmente em parâmetros de métodos para aceitar diferentes tipos genéricos com segurança.
Tipos de curingas em Java
1. Curingas de limite superior
Esses curingas podem ser usados quando você deseja relaxar as restrições de uma variável. Por exemplo, digamos que você queira escrever um método que funcione em List< Integer >Lista< Double >e lista< Number >você pode fazer isso usando um curinga com limite superior.
Para declarar um curinga de limite superior, use o caractere curinga ('?') seguido pela palavra-chave extends seguida por seu limite superior.
public static void add(Lista extends Number>lista)
conversão de int para string
Implementação:
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; } }
Saída
Total sum is:22.0 Total sum is:15.299999999999999
Explicação: No programa acima, list1 contém valores inteiros e list2 contém valores duplos. Ambos são passados para o método sum que usa um curinga extends Number>. Isso significa que ele pode aceitar qualquer lista de um tipo que seja uma subclasse de Number, como Integer ou Double.
2. Curingas com limite inferior
É expresso usando o caractere curinga ('?') seguido pela palavra-chave super seguida por seu limite inferior: super A>.
diferenciação parcial em látex
Sintaxe: Tipo de coleção super A>
Implementação:
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); } }
Saída
[4 5 6 7] [4 5 6 7]
Explicação: Aqui o método printOnlyIntegerClassorSuperClass aceita apenas Integer ou suas superclasses (como Number). Se você tentar passar uma lista de Double, ocorrerá um erro em tempo de compilação porque Double não é uma superclasse de Integer.
Observação: Use o curinga estendido quando quiser obter valores de uma estrutura e o supercuringa ao colocar valores em uma estrutura. Não use curinga ao obter e colocar valores em uma estrutura. Você pode especificar um limite superior para um curinga ou um limite inferior, mas não pode especificar ambos.
3. Curinga ilimitado
Este tipo de curinga é especificado usando o caractere curinga (?) por exemplo Lista. Isso é chamado de lista de tipos desconhecidos. Eles são úteis nos seguintes casos -
o que é uma pilha em java
- Ao escrever um método que pode ser empregado usando a funcionalidade fornecida na classe Object.
- Quando o código usa métodos da classe genérica que não dependem do parâmetro de tipo
Implementação:
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); } }
Saída
[1 2 3] [1.1 2.2 3.3]