我有一个名为的抽象超类C
和它的多个子类:SubC1, SubC2, ...
现在我有一个超类的集合,C
我想迭代它,但根据它是哪个子类做一些不同的事情。这是伪代码:
abstract class C{}
class SubC1 extends C{}
class SubC2 extends C{}
...
for(C c : cs){
if(c is a SubC1){
//do one thing
}
if(c is a SubC2){
//do another
}
}
但是我不确定如何设置 if 条件。我的第一个想法是使用instanceof
,但后来我意识到它不适用于沮丧。然后我考虑添加一个String
字段C
并让每个子类定义它并以此为基础设置我的条件,但这似乎很笨拙。我还考虑过通过强制沮丧和捕捉 来尝试使用消除过程ClassCastExceptions
,但这也很笨重,而且看起来有点危险。那么如何在没有愚蠢代码的情况下获得我想要的东西呢?
编辑:我忘了补充一点,我doSomething()
在 C 中添加一个函数并覆盖它是没有意义的。
编辑2:出于某种原因,我认为这样做会c instanceof SubC1
导致编译器错误。现在我意识到它没有我的答案。