我需要某種類型的數據結構,它可以包含同一個超類的異構子類,我已經實現了所有這些子類。Java - 包含同一超類的一組不同子類的數據結構
到目前爲止,我試圖有一個ArrayList<SuperClass> list = new ArrayList<SuperClass>();
然後,我假設我將能夠將列表的每個插槽到任何一個子類,但這不是很好的工作。
我需要一個有效的方式來做到上述。
謝謝!
我需要某種類型的數據結構,它可以包含同一個超類的異構子類,我已經實現了所有這些子類。Java - 包含同一超類的一組不同子類的數據結構
到目前爲止,我試圖有一個ArrayList<SuperClass> list = new ArrayList<SuperClass>();
然後,我假設我將能夠將列表的每個插槽到任何一個子類,但這不是很好的工作。
我需要一個有效的方式來做到上述。
謝謝!
你可以用任何存在的數據結構來做,我會推薦List
或Set
。例如:
Collection<Super> supers = new ArrayList<Super>();
現在,當你這樣說:
我假設我就能列表中的每個插槽扔在任 的子類,
也就是說一個無效的假設。該集合將包含任何擴展了Super
的對象,但不能隨意將每個元素轉換爲任何所需的元素。您將需要每個元素做一個instanceof
測試,如果你正在尋找類型的功能,例如如下:
for(Super currentSuper : supers)
{
if(currentSuper instanceof SubA)
{
SubA subA = (Suba) currentSuper);
// do stuff with subA
}
else if(currentSuper instanceof SubB)
{
SubB subB = (SubB) currentSuper);
// do stuff with subB
}
}
範圍爲需要的話。
現在對弗拉德點:
和更好的設計是不實際測試類是什麼, 只是調用一個虛擬的方法,它會做正確的事 任何case
如果您可以保證所有潛在子類的功能,並且不會覆蓋您的類(如果您沒有最終標記它們),則不需要執行測試實例。相反,您的代碼可能如此簡單:
for(Super currentSuper : supers)
{
currentSuper.doSomethingNifty();
}
嗯。什麼不工作? – Vlad
@BheshGurung實際上應該是'Collection'而不是'List' – Woot4Moo