我有一个名为C
的抽象父类(super class)及其多个子类:SubC1,SubC2,...
现在我有一个父类(super class)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
但后来我意识到它不适用于向下转型。然后我考虑向 C
添加一个 String
字段,并让每个子类定义它并以此为基础我的条件,但这看起来很笨拙。我还考虑尝试通过强制向下转型并捕获 ClassCastExceptions 来尝试使用消除过程,但这也很笨拙,而且似乎有点危险。那么我怎样才能在不使用愚蠢的代码的情况下获得我想要的东西呢?
编辑:我忘了补充一点,在 C 中添加一个 doSomething()
函数并覆盖它对我来说是没有意义的。
编辑2:出于某种原因,我认为执行c instanceof SubC1
会导致编译器错误。现在我意识到我没有答案。
最佳答案
在 C
中拥有一个抽象方法 doSomething
并在所有子类中重写它,然后调用 C#doSomething
关于java - 确定适当沮丧的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17203654/