2013-04-03 29 views
0

情况:访问具体方法一类的“类型”,集合中

  • 我有几种方法的抽象类:
  • 我有延长上述
  • 类的几个子类
  • 我有一个集合<MyAbstractClass>集合充满了我的主类中的子类的新对象
  • 我有一个独特的方法之一,我希望执行一个覆盖我通常调用的方法的子类。

即如果条件为,而不是通常collection.get(i).method();其中i是索引真,执行collection.get(i).specificMethod();

任何人都可以点我到正确的主题,进一步研究?另外,对我的情况有一点洞察力会产生奇迹。

+0

重新考虑你的方法。在抽象类中创建一个方法,例如'specificActions()'并在每个子类中实现它。 – Keppil

回答

1

这听起来像你想instanceof

for (AbstractThing thing : yourCollection) { 
    if (thing instanceof SubclassWithSpecialMethod) { 
     ((SubclassWithSpecialMethod)thing).specialMethod(); 
    } 
    else { 
     thing.method(); 
    } 
} 

虽然也有instanceof完全合法的用途,如果你发现你使用它(特别是如果你使用了很多),有时指最好退一步看看更大的图片,看看是否有某种方式可以重新组织,以免不这样做。

在这种情况下,例如,也许抽象类可以有method,然后在出现的特殊行为的子类可以覆盖method与特殊行为,所以呼叫者只需拨打method和多态性踢给它当你处理特定的子类时的特殊行为。

+0

你会详细说明为什么在这种情况下使用instanceOf会是一个不明智的选择吗?看起来对我来说听起来很完美 – TheJackal

+0

@TheJackal:我不是说它不是。正如我所说的,'instanceof'完全合法的用途,这可能就是其中之一。这完全取决于更大的背景。 –

+0

感谢T.J的洞察力 – TheJackal

0

检查条件method(),如果符合,请从那里自行拨打specificMethod()。根据你的描述,这只适用于某些子类。

如果您正在检查外部条件,请将标志传递给method()以指示是否应该调用同一个实例的specificMethod()

相关问题