2010-11-15 48 views
1

我有一些泛型和集合的問題。 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 {} 

那麼我們如何使用函數foo與集< C>參數?

謝謝。

回答

4

通過改變foo的簽名:

void foo(Set<? extends I> set){} 

您將無法foo值添加到組,但你可以在它們之間迭代或檢查遏制。

+0

謝謝。這是我需要的。 – 2010-11-15 19:59:10

1

Jon Skeet是對的。但是,如果確實需要添加某些東西,則可以編寫通用函數

public <T extends I> void foo2(Set<T> set, T added){set.add(added);}