是否可以编写一个接受不同抽象的泛型参数的方法?

时间:2012-03-29 16:20:03

标签: java generics bounded-wildcard pecs

作为followup to this question,是否可以编写一个方法,将Dog添加到合适的房间? (在这个例子中,它会接受Animal房间或Dog房间。)或者我是否被迫写下两种不同的方法如下? (因为类型擦除,我甚至不能依赖重载。)

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

1 个答案:

答案 0 :(得分:5)

您使用Room作为消费者,因为它接受新的Dog,因此Josh Bloch着名的PECS acronym适用。

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