Java 添加到传递到方法中的泛型集

Java 添加到传递到方法中的泛型集,java,generics,collections,Java,Generics,Collections,假设我有以下课程: 畜生 猫 狗 母牛 动物是基类,猫、狗和牛都是它的子类 我现在有了一个集合,集合和集合它们的使用方式都是相同的,因此有必要创建一个通用函数来对它们进行操作: private boolean addObject(Animal toAdd, Animal defVal, Set<? extends Animal> vals) 有没有办法解决这个问题,这样我就可以保留通用功能,而不需要强制转换?除了制作所有基本类型的集合,本例中的动物?很好的研究,你几乎做到了。您

假设我有以下课程:

  • 畜生
  • 母牛
动物是基类,猫、狗和牛都是它的子类

我现在有了一个
集合
集合
集合
它们的使用方式都是相同的,因此有必要创建一个通用函数来对它们进行操作:

private boolean addObject(Animal toAdd, Animal defVal, Set<? extends Animal> vals)

有没有办法解决这个问题,这样我就可以保留通用功能,而不需要强制转换?除了制作所有基本类型的集合,本例中的动物?

很好的研究,你几乎做到了。您只需将上限添加到
T

private <T extends Animal> boolean addObject(T toAdd, T defVal, Set<? super T> vals)

private boolean addObject(T toAdd,T deffal,set这里有没有不用html代码就可以使用的方法?=>是的,请看我的编辑。你很少需要在SO上使用html。+1用于你之前的研究。很遗憾,这在这个网站上是很少见的。@assylias谢谢你。现在,如果我能记得下次我需要问问题的话。@DuncanJones我真的很懒,所以我一般来说,在尝试提问之前,请自己解决问题。@Legowaffles用于格式化。谢谢,这很有效。如果可能的话,我会在8分钟左右将其标记为答案。详细说明此方法签名的含义可能很有用。它意味着:“给定某种类型的
T
,它要么是
Animal
,要么是
Animal
(如
Cat
)的子类,此方法采用两个
T
类型的参数加上
T
(如
Set
)或
T
(如
Set
)的超类型的
Set
)。从
Set
参数中省略
?super
仍将允许此操作,只是不使用
Set
。而是
Set
private <T> boolean addObject(T toAdd, T defVal, Set<? super T> vals)
((Animal)toAdd).getAnimalType()
private <T extends Animal> boolean addObject(T toAdd, T defVal, Set<? super T> vals)