我对泛型和集合有一些问题。Java仅在编译级别支持泛型。所以我们不能使用案例B。
{
foo(new HashSet<I>()); //case A
foo(new HashSet<C>()); //case B: wrong
}
void foo(Set<I> set){}
class C implements I{}
interface I {}那么我们如何通过Set< C>参数来使用函数foo呢?
谢谢。
发布于 2010-11-16 03:51:48
通过更改Foo的签名:
void foo(Set<? extends I> set){}您不能将值添加到foo中的集合中,但您可以遍历它们或检查包含性。
发布于 2010-11-16 05:50:28
乔恩·斯基特是对的。但是,如果您确实需要添加某些内容,则可以编写一个泛型函数
public <T extends I> void foo2(Set<T> set, T added){set.add(added);}https://stackoverflow.com/questions/4188215
复制相似问题