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());
   }   
}
 
     
    