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

Geo*_* K. 2 java class superclass data-structures

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

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

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

谢谢!

Woo*_*Moo 5

你可以使用任何存在的数据结构,我建议a List或a Set.例如:

Collection<Super> supers = new ArrayList<Super>();  
Run Code Online (Sandbox Code Playgroud)

现在你说的时候:

我假设我将能够将列表的每个插槽转换为子类中的任何一个,

这是一个无效的假设.该集合将保留任何扩展的对象,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
    } 
}  
Run Code Online (Sandbox Code Playgroud)

适用范围.

现在关于弗拉德:

更好的设计不是测试实际的类是什么,而只是调用一个虚拟方法,无论如何都会做正确的事情

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

for(Super currentSuper : supers)  
{  
    currentSuper.doSomethingNifty();
}  
Run Code Online (Sandbox Code Playgroud)

  • ...更好的设计不是测试实际的类是什么,而只是调用一个虚拟方法,无论如何都会做正确的事情. (3认同)