У меня есть следующий пример:
package cage;
import java.util.HashSet;
import java.util.Set;
import animals.Animal;
public class Cage<T extends Animal> { //A cage for some types of animals
private Set<T> set = new HashSet<T>();
public void add(T animal) {
set.add(animal);
}
public void showAnimals() {
for (T animal : set) {
System.out.println(animal.getName());
}
}
public void transferTo(Cage<? super T> cage) {
cage.set.addAll(this.set);
}
}
Основной класс:
package exe;
import cage.Cage;
import animals.Animal;
import animals.Ape;
import animals.Lion;
import animals.Rat;
public class Main {
public static void main(String[] args) {
System.out.println("Test with super........");
Cage<Animal> animals = new Cage<Animal>();
Cage<Lion> lions = new Cage<Lion>();
animals.add(new Rat(true, 4, "Rat", true)); // OK to put a Rat into a Cage<Animal>
lions.add(new Lion(true, 4, "King", 9));
lions.transferTo(animals); // invoke the super generic method -> animals is SUPER of lion.
animals.showAnimals();
}
}
В клетке класса есть вызов
cage.set.addAll (this.set);
Почему это работает, чтобы вызвать "cage.set ..." с точечной нотацией, хотя у меня нет ни метода getSet, ни "set" статического? Какое техническое образование?