Java Generics - Caracteres curinga de limite inferior

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 Integer ou suas superclasses como Number.

Para declarar um parâmetro Wildcard de limite inferior, liste o?, Seguido pela palavra-chave super, seguida por seu limite inferior.

Exemplo

O exemplo a seguir ilustra como super é usado para especificar um curinga de limite inferior.

package com.tutorialspoint;

import java.util.ArrayList;
import java.util.List;

public class GenericsTester {

   public static void addCat(List<? super Cat> catList) {
      catList.add(new RedCat());
      System.out.println("Cat Added");
   }

   public static void main(String[] args) {
      List<Animal> animalList= new ArrayList<Animal>();
      List<Cat> catList= new ArrayList<Cat>();
      List<RedCat> redCatList= new ArrayList<RedCat>();
      List<Dog> dogList= new ArrayList<Dog>();

      //add list of super class Animal of Cat class
      addCat(animalList);

      //add list of Cat class
      addCat(catList);

      //compile time error
      //can not add list of subclass RedCat of Cat class
      //addCat(redCatList);

      //compile time error
      //can not add list of subclass Dog of Superclass Animal of Cat class
      //addCat.addMethod(dogList); 
   }
}
class Animal {}

class Cat extends Animal {}

class RedCat extends Cat {}

class Dog extends Animal {}

Isso produzirá o seguinte resultado -

Cat Added
Cat Added