4

この質問のフォローアップとしてDog、適切な部屋にを追加する単一のメソッドを作成することは可能ですか?Animal(この例では、部屋または部屋のいずれかを受け入れますDog。)または、次のように2つの異なるメソッドを作成する必要がありますか?(型消去のためにオーバーロードに頼ることさえできません)。

public class Rooms {
   interface Animal {}
   class Dog implements Animal {}
   class Room<T> {
      void add(T t) {}
   }

   void addDogToAnimalRoom(Room<Animal> room) {
      room.add(new Dog());
   }

   void addDogToDogRoom(Room<Dog> room) {
      room.add(new Dog());
   }   
}
4

1 に答える 1

5

Room新しいものを受け入れているので、消費者として使用しているDogので、JoshBlochの有名なPECSの頭字語が適用されます。

void addDogToDogRoom(Room<? super Dog> room) {
  room.add(new Dog());
}
于 2012-03-29T16:21:00.130 に答える