我試圖找到一種方法,在該方法中我可以返回一個通用集合,它將接受子類型。下面的代碼返回Set<? extends A>
,我試圖添加B
。
import java.util.Set;
import java.util.HashSet;
public class Test {
private static class A {}
private static class B extends A {}
public Set<? extends A> getSet() {
return new HashSet<B>();
}
public void work() {
getSet().add(new B()); // compile error
}
}
這將導致以下錯誤:
Test.java:13: cannot find symbol
symbol : method add(Test.B)
location: interface java.util.Set<capture#320 of ? extends Test.A>
getSet().add(new B());
的generic wildcard tutorial指出B
不能被添加到Set<? extends A>
,因爲我們不知道,如果B
是A
一個亞型,但我只是定義爲這樣。有人能爲我澄清這一點嗎?
我認爲這個想法是,在一組'C'中添加'B'會引發錯誤,因爲'B'不會擴展'C'。這可能是不可能的,因爲它在編譯時不能被知道。 – paislee 2012-01-31 19:39:30
你是對的,我沒有考慮過。說實話,這是我遇到的問題的一個蒸餾版本。我會找到另一種方式。 – KennethJ 2012-01-31 19:42:58