我想創建一個只接受特定類的容器。使用泛型如下:Java泛型:通配符
static class Test1<C extends Test1> {
C field = null;
public C getField() {
return field;
}
public void setField(C field) {
this.field = field;
}
}
static class Test2 extends Test1{
}
class MainTest {
public static void main(String[] args) throws Exception {
List<Test1<? extends Test1>> list = new ArrayList<Test1<? extends Test1>>();
Test1<Test2> newInstance = new Test1<Test2>();
list.add(newInstance);
Test1<Test2> value = list.get(1);
}
}
只是想了解爲什麼這個名單>願意接受的newInstance對象,但編譯時錯誤,而我取「的Test1值」後發生? 是否有任何解決該問題的機會?
在此先感謝。
UPDATE 許多人注意到「Test1<? extends Test1>
,其中?可能不等於Test2」。 我完全同意,但據我所知,在這種情況下,我需要鍵入提取的值到Test1<Test2>
,這意味着在這種情況下泛型的全部內容都會丟失......如果我錯了,請糾正我。
你爲什麼不宣佈名單的'名單> list'? –
BalusC
2011-12-28 15:38:47
'Test1'是'Test1 <?擴展Test1 >>',但Test1 <?擴展Test1 >>'不是'Test1 '的一個實例。 (你也有罕見的類型 - 混合的通用類型和原始類型 - 這是個壞消息。) –
2011-12-28 15:41:14
我希望列表包含Test1的所有組合,其中包含它的任何後代。 – user1119571 2011-12-28 15:41:47