我需要有某种数据结构,可以包含同一个超类的异类子类,我自己实现了所有这些。
到目前为止,我正在尝试ArrayList<SuperClass> list = new ArrayList<SuperClass>();
然后,我假设我将能够将列表的每个插槽转换为任何一个子类,但这样做不是很好。
我需要一种有效的方法来完成上述工作。
谢谢!
答案 0 :(得分:5)
您可以对存在的任何数据结构执行此操作,我建议使用List
或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();
}