Is it possible to write a single method that accepts a generic parameter of varying abstraction?

StackOverflow https://stackoverflow.com/questions/9929370

문제

As a followup to this question, is it possible to write a single method that adds a Dog to a suitable room? (In this example, it would accept either an Animal room or a Dog room.) Or am I forced to write two distinct methods as below? (I can't even rely on overloading because of type erasure).

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());
   }   
}
도움이 되었습니까?

해결책

You're using Room as a consumer, since it's accepting the new Dog, so Josh Bloch's famous PECS acronym applies.

void addDogToDogRoom(Room<? super Dog> room) {
  room.add(new Dog());
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top