Java - 包含同一个超类的一组不同子类的数据结构

时间:2012-11-04 21:55:58

标签: java class data-structures superclass

我需要有某种数据结构,可以包含同一个超类的异类子类,我自己实现了所有这些。

到目前为止,我正在尝试ArrayList<SuperClass> list = new ArrayList<SuperClass>(); 然后,我假设我将能够将列表的每个插槽转换为任何一个子类,但这样做不是很好。

我需要一种有效的方法来完成上述工作。

谢谢!

1 个答案:

答案 0 :(得分:5)

您可以对存在的任何数据结构执行此操作,我建议使用ListSet。例如:

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
    } 
}  

需要的范围。

现在谈到弗拉德:

  

更好的设计不是测试实际的类是什么,   但只是调用一个虚拟方法,它将做正确的事情   任何情况

如果您可以保证所有潜在子类的功能,并且对于覆盖您的类的人没有任何问题(如果您没有将它们标记为最终),则不需要执行测试实例。相反,您的代码可以像以下一样简单:

for(Super currentSuper : supers)  
{  
    currentSuper.doSomethingNifty();
}