私は次の例があります呼び出しゲッターのないフィールドにアクセスするのはなぜですか?
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(); } }
;
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); } }
メインクラス
私はgetSetメソッドも静的な "set"も持っていませんが、ドット表記で "cage.set ..."を呼び出すのはなぜですか?技術的背景は何ですか?
ちょっと - それは私の答えからの[私の* 'transferTo'メソッドです[このジェネリックとスーパーバウンディングについてのこの前の質問](http://stackoverflow.com/questions/6826916/useful-example-with-super-and- @Bevorからのジェネリックでの曖昧さ) - あなたのコードでそれが生き生きとしているのを見てうれしく思います:) – Bohemian
はい、あなたは私の質問を他のスレッドで逃したと思っていましたので、私はそれを新しい質問として尋ねました。 ) – Bevor