java - 是否可以编写一个方法来接受不同抽象的通用参数?

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

最佳答案

您正在使用 Room 作为消费者,因为它正在接受新的 Dog,所以 Josh Bloch 著名的 PECS acronym适用。

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

关于java - 是否可以编写一个方法来接受不同抽象的通用参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9929370/

相关文章:

java - C++ 中 Java 注释的最佳等效项是什么?

java - 使用 Web 服务在 Java 中调用 C#.Net 函数

c# - 将 Expression<T, string>> 转换为 Expression<T, bool>>

java - 如何创建一个方法来接受并返回任何类型的 ObjectProperty<?>?

java - 向 map 列表添加条目时出错

java - 什么是 PECS(生产者扩展消费者 super )?

java - 如何保护我的 Android 应用程序中同步的数据?

java - Java 中的有界通配符

Java 'reduceLeft' 签名/下界类型参数

java - tomcat可以存储从 war 中调用的变量/属性吗