我需要某种可以包含同一个超类的异构子类的数据结构,所有这些都是我自己实现的。
到目前为止,我试图拥有一个ArrayList<SuperClass> list = new ArrayList<SuperClass>();
然后,我假设我将能够将列表的每个插槽转换为任何一个子类,但这并不是那么好。
我需要一种有效的方法来完成上述工作。
谢谢!
我需要某种可以包含同一个超类的异构子类的数据结构,所有这些都是我自己实现的。
到目前为止,我试图拥有一个ArrayList<SuperClass> list = new ArrayList<SuperClass>();
然后,我假设我将能够将列表的每个插槽转换为任何一个子类,但这并不是那么好。
我需要一种有效的方法来完成上述工作。
谢谢!
您可以使用任何存在的数据结构来完成,我建议使用 aList
或 a 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
}
}
视需要而定。
现在关于弗拉德:
更好的设计不是测试实际的类是什么,而只是调用一个虚拟方法,无论如何它都会做正确的事情
如果您可以保证所有潜在子类的功能并且对覆盖您的类的人没有任何问题(如果您没有将它们标记为最终),则不需要进行测试实例。相反,您的代码可能很简单:
for(Super currentSuper : supers)
{
currentSuper.doSomethingNifty();
}