Java Generics - mniejsze ograniczone symbole wieloznaczne

Znak zapytania (?) Reprezentuje symbol wieloznaczny, oznacza nieznany typ w rodzajach generycznych. Może się zdarzyć, że będziesz chciał ograniczyć rodzaje typów, które mogą być przekazywane do parametru typu. Na przykład metoda, która operuje na liczbach, może chcieć akceptować tylko wystąpienia typu Integer lub jej nadklasy, takie jak Number.

Aby zadeklarować parametr wieloznaczny ograniczający dolną granicę, należy wpisać?, Po którym następuje słowo kluczowe super, a po nim jego dolną granicę.

Przykład

Poniższy przykład ilustruje, w jaki sposób super jest używany do określenia dolnej granicy symbolu wieloznacznego.

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 {}

To da następujący wynik -

Cat Added
Cat Added