I 다음 예를 가지고게터가없는 필드에 액세스 할 수있는 이유는 무엇입니까?
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);
}
}
메인 클래스 : 호출
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 ..."을 호출하는 이유는 무엇입니까? getSet-method도 "set"정적도 아닙니다. 기술적 배경은 무엇입니까?
안녕하세요 - 저의 대답은 [제네릭과 슈퍼 경계에 대한이 이전 질문] 안녕하세요 - 그건 * 내 *'transferTo' 방법입니다 (http://stackoverflow.com/questions/6826916/useful-example-with-super-and- @Bevor에서 애매한 - 확장 -에 - 당신의 코드에 살고있는 것을보고 좋은 :) – Bohemian
예, 나는 당신이 새로운 질문으로 그것을 물어보기로 결심 했으므로 다른 스레드에서 내 질문을 놓친 것으로 생각 :) – Bevor