繁体   English   中英

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

[英]Java - data structure to contain a set of different subclasses of the same superclass

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

到目前为止,我正在尝试使用ArrayList<SuperClass> list = new ArrayList<SuperClass>(); 然后,我假设我将能够将列表的每个位置转换为两个子类中的任何一个,但是效果不是很好。

我需要一种有效的方法来进行上述操作。

谢谢!

您可以使用任何存在的数据结构来做到这一点,我建议您使用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();
}  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM