Geo*_* K. 2 java class superclass data-structures
我需要有一些数据结构,可以包含同一个超类的异类子类,我自己实现了所有这些.
到目前为止,我试图有一个ArrayList<SuperClass> list = new ArrayList<SuperClass>();
然后,我假设我将能够将列表的每个插槽转换为任何一个子类,但这不是很好.
我需要一种有效的方法来完成上述工作.
谢谢!
你可以使用任何存在的数据结构,我建议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)