情况:
<MyAbstractClass>
集合中填充了我的主类即。如果条件为真,则执行collection.get(i).method();
i
,其中collection.get(i).specificMethod();
是索引
有人能指出正确的话题进一步研究吗?此外,对我的情况有一点了解也会产生奇迹。
答案 0 :(得分:1)
听起来你想要instanceof
:
for (AbstractThing thing : yourCollection) {
if (thing instanceof SubclassWithSpecialMethod) {
((SubclassWithSpecialMethod)thing).specialMethod();
}
else {
thing.method();
}
}
虽然instanceof
有完全合法的用法,但如果您发现它正在使用它(特别是如果您经常使用它),它有时会表明退后一步会很好并查看较大的图片,看看是否有某种方法可以重组事情,这样你就不会这样做了。
在这种情况下,例如,抽象类可能有method
,然后具有特殊行为的子类可以覆盖 method
具有特殊行为,所以调用者只需调用method
,并且当您处理该特定子类时,多态性就会启动它以使其具有特殊行为。
答案 1 :(得分:0)
检查method()
中的条件,如果符合,请从那里拨打specificMethod()
。根据您的描述,这仅适用于某些子类。
如果您要检查外部条件,请将标记传递给method()
以指示是否应该呼叫同一实例的specificMethod()
。