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