添加到传递到方法中的泛型集
2022-09-03 02:33:09
假设我有以下类:
- 动物
- 猫
- 狗
- 牛
动物是基类,猫,狗和牛每个子类它。
我现在有一个 ,它们中的每一个都以相同的方式使用,因此创建一个泛型函数来操作它们是有意义的:Set<Cat>
Set<Dog>
Set<Cow>
private boolean addObject(Animal toAdd, Animal defVal, Set<? extends Animal> vals)
这很好用,我可以毫无问题地自由通过我的套装。
问题出现:我无法尝试将 Animal toAdd 添加到参数 vals。谷歌搜索显示,如果我将方法更改为读取:
private boolean addObject(Animal toAdd, Animal defVal, Set<? super Animal> vals)
我将能够将动物添加到参数vals。这有效,除了现在,我不能通过我的子类我的猫,狗和牛的集合。进一步的研究告诉我,以下工作正常,没有警告启动:
private <T> boolean addObject(T toAdd, T defVal, Set<? super T> vals)
问题是,我需要能够执行Animal所有方法调用。这很容易使用简单的强制转换:
((Animal)toAdd).getAnimalType()
有没有办法解决这个问题,这样我就可以保留通用功能,而不需要强制转换?除了使我的集合成为基本类型的所有集合之外,在此示例中,动物?