Wildcards

public void F1(Class1<?> a) { }                                 // усі типи

public void F1(Class1<? extends Numbers> a) { }     // усі хто успадковує Numbers

public void F1(Class1<? super Numbers> a) { }       // вище Numbers, аж до Object

F1(new Class1<Integers>);

F1(new Class1<Worker>);     

F1(new Class1<Object>);    

    

 

Приклад

import java.util.ArrayList;

import java.util.List;

public static void main(String[] args) {

     List<Animal> listOfAnimal = new ArrayList<>();

     listOfAnimal.add(new Animal(1));

     listOfAnimal.add(new Animal(2));

     Show(listOfAnimal);

     List<Cat> listOfCats = new ArrayList<>();

     listOfCats.add(new Cat());

     listOfCats.add(new Cat());

     Show(listOfCats);

}

public static void Show(List<? extends Animal> list) {

     for(Animal animal : list) {

          System.out.println(animal);

     }

}

-----------------

public class Animal {

     private int id;

     public Animal() {

     }

     public Animal(int id) {

          this.id = id;

     }

     public String toString() {

          return String.valueOf(id);

     }

}

-----------------

public class Cat extends Animal {

}