我试图创建一个方法,该方法将两个类A
和B
的一些常见超类型的集合作为参数(然后添加A
的实例和B
到集合)。如下所示:
public <T, A extends T, B extends T> void foo(Collection<T> collection);
当然,这不起作用,因为Java在这里将A和B解释为类型参数,使具体类型A
和B
蒙上阴影。由于我知道类型层次结构,因此我知道A
和B
的最低共同祖先,比如C
,并且可以只有:
public void foo(Collection<? super C> collection);
我宁愿不这样做,因为我很可能会改变类型层次结构,并希望foo
尽可能通用。