Я пытаюсь следовать документации оракула для генериков в сборе, для верхних границ и нижних границ, но это создает путаницу .. аJAVA Дженерики Bounds Путаница
import java.util.ArrayList;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
List<Dog> dogList = new ArrayList<>();
dogList.add(new Dog());
dogList.add(new Dog());
List<Cat> catList = new ArrayList<>();
catList.add(new Cat());
catList.add(new Cat());
List<Entity> entList = new ArrayList<>();
entList.add(new Entity());
entList.add(new Entity());
print(dogList);
print(catList);
print1(entList);
}
public static void print(List<? extends Animal> animals){
for(Animal an : animals){
System.out.println(an);
}
}
public static void print1(List<? super Animal> animals){
animals.add(new Animal());
animals.add(new Dog());
for(Object an : animals){
System.out.println(an);
}
}
}
class Entity {}
class Animal extends Entity{}
class Dog extends Animal {}
class Cat extends Animal {}
Теперь путаница, даже переменная имеет тип List<? super Animal>
, мне разрешено добавлять новые экземпляры собаки, например, animals.add(new Dog())
... почему ??? также, если моя переменная имеет тип List<? extends Animal>
, это не позволяет мне добавлять экземпляры Animal, или Dog или Entity ... любые причины?
> подстановочных символов, является общим –
Rugal