O ponto de interrogação (?), Representa o curinga, significa tipo desconhecido em genéricos. Pode haver momentos em que você queira restringir os tipos de tipos que podem ser passados para um parâmetro de tipo. Por exemplo, um método que opera em números pode aceitar apenas instâncias de Number ou suas subclasses.
Para declarar um parâmetro Wildcard de limite superior, liste o?, Seguido pela palavra-chave extends, seguida por seu limite superior.
Exemplo
O exemplo a seguir ilustra como extends é usado para especificar um curinga de limite superior.
package com.tutorialspoint;
import java.util.Arrays;
import java.util.List;
public class GenericsTester {
public static double sum(List<? extends Number> numberlist) {
double sum = 0.0;
for (Number n : numberlist) sum += n.doubleValue();
return sum;
}
public static void main(String args[]) {
List<Integer> integerList = Arrays.asList(1, 2, 3);
System.out.println("sum = " + sum(integerList));
List<Double> doubleList = Arrays.asList(1.2, 2.3, 3.5);
System.out.println("sum = " + sum(doubleList));
}
}
Isso produzirá o seguinte resultado -
Resultado
sum = 6.0
sum = 7.0