gpt4 book ai didi

Java - 包含同一父类(super class)的一组不同子类的数据结构

转载 作者:行者123 更新时间:2023-11-30 06:27:40 24 4
gpt4 key购买 nike

我需要某种数据结构,可以包含同一父类(super class)的异构子类,所有这些都是我自己实现的。

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

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

谢谢!

最佳答案

您可以使用任何现有的数据结构来实现,我推荐使用ListSet。例如:

Collection<Super> supers = new ArrayList<Super>();  

现在当你这样说时:

I am assuming I will be able to cast each slot of list into either of the subclasses,

这是一个无效的假设。该集合将包含任何扩展 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
}
}

需要的范围。

现在关于 Vlad 的观点:

and much better design would be not to test what the actual class is, but just to call a virtual method, which will do the right thing in any case

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

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

关于Java - 包含同一父类(super class)的一组不同子类的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13223357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com